1 //===-- llvm/CodeGen/MachineRegisterInfo.h ----------------------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the MachineRegisterInfo class.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_CODEGEN_MACHINEREGISTERINFO_H
15 #define LLVM_CODEGEN_MACHINEREGISTERINFO_H
16
17 #include "llvm/ADT/BitVector.h"
18 #include "llvm/ADT/IndexedMap.h"
19 #include "llvm/ADT/PointerUnion.h"
20 #include "llvm/ADT/iterator_range.h"
21 // PointerUnion needs to have access to the full RegisterBank type.
22 #include "llvm/CodeGen/GlobalISel/RegisterBank.h"
23 #include "llvm/CodeGen/MachineFunction.h"
24 #include "llvm/CodeGen/MachineInstrBundle.h"
25 #include "llvm/Target/TargetRegisterInfo.h"
26 #include "llvm/Target/TargetSubtargetInfo.h"
27 #include <vector>
28
29 namespace llvm {
30 class PSetIterator;
31
32 /// Convenient type to represent either a register class or a register bank.
33 typedef PointerUnion<const TargetRegisterClass *, const RegisterBank *>
34 RegClassOrRegBank;
35
36 /// MachineRegisterInfo - Keep track of information for virtual and physical
37 /// registers, including vreg register classes, use/def chains for registers,
38 /// etc.
39 class MachineRegisterInfo {
40 public:
41 class Delegate {
42 virtual void anchor();
43 public:
44 virtual void MRI_NoteNewVirtualRegister(unsigned Reg) = 0;
45
~Delegate()46 virtual ~Delegate() {}
47 };
48
49 private:
50 MachineFunction *MF;
51 Delegate *TheDelegate;
52
53 /// True if subregister liveness is tracked.
54 bool TracksSubRegLiveness;
55
56 /// VRegInfo - Information we keep for each virtual register.
57 ///
58 /// Each element in this list contains the register class of the vreg and the
59 /// start of the use/def list for the register.
60 IndexedMap<std::pair<RegClassOrRegBank, MachineOperand *>,
61 VirtReg2IndexFunctor>
62 VRegInfo;
63
64 /// RegAllocHints - This vector records register allocation hints for virtual
65 /// registers. For each virtual register, it keeps a register and hint type
66 /// pair making up the allocation hint. Hint type is target specific except
67 /// for the value 0 which means the second value of the pair is the preferred
68 /// register for allocation. For example, if the hint is <0, 1024>, it means
69 /// the allocator should prefer the physical register allocated to the virtual
70 /// register of the hint.
71 IndexedMap<std::pair<unsigned, unsigned>, VirtReg2IndexFunctor> RegAllocHints;
72
73 /// PhysRegUseDefLists - This is an array of the head of the use/def list for
74 /// physical registers.
75 std::unique_ptr<MachineOperand *[]> PhysRegUseDefLists;
76
77 /// getRegUseDefListHead - Return the head pointer for the register use/def
78 /// list for the specified virtual or physical register.
getRegUseDefListHead(unsigned RegNo)79 MachineOperand *&getRegUseDefListHead(unsigned RegNo) {
80 if (TargetRegisterInfo::isVirtualRegister(RegNo))
81 return VRegInfo[RegNo].second;
82 return PhysRegUseDefLists[RegNo];
83 }
84
getRegUseDefListHead(unsigned RegNo)85 MachineOperand *getRegUseDefListHead(unsigned RegNo) const {
86 if (TargetRegisterInfo::isVirtualRegister(RegNo))
87 return VRegInfo[RegNo].second;
88 return PhysRegUseDefLists[RegNo];
89 }
90
91 /// Get the next element in the use-def chain.
getNextOperandForReg(const MachineOperand * MO)92 static MachineOperand *getNextOperandForReg(const MachineOperand *MO) {
93 assert(MO && MO->isReg() && "This is not a register operand!");
94 return MO->Contents.Reg.Next;
95 }
96
97 /// UsedPhysRegMask - Additional used physregs including aliases.
98 /// This bit vector represents all the registers clobbered by function calls.
99 BitVector UsedPhysRegMask;
100
101 /// ReservedRegs - This is a bit vector of reserved registers. The target
102 /// may change its mind about which registers should be reserved. This
103 /// vector is the frozen set of reserved registers when register allocation
104 /// started.
105 BitVector ReservedRegs;
106
107 typedef DenseMap<unsigned, unsigned> VRegToSizeMap;
108 /// Map generic virtual registers to their actual size.
109 mutable std::unique_ptr<VRegToSizeMap> VRegToSize;
110
111 /// Accessor for VRegToSize. This accessor should only be used
112 /// by global-isel related work.
getVRegToSize()113 VRegToSizeMap &getVRegToSize() const {
114 if (!VRegToSize)
115 VRegToSize.reset(new VRegToSizeMap);
116 return *VRegToSize.get();
117 }
118
119 /// Keep track of the physical registers that are live in to the function.
120 /// Live in values are typically arguments in registers. LiveIn values are
121 /// allowed to have virtual registers associated with them, stored in the
122 /// second element.
123 std::vector<std::pair<unsigned, unsigned> > LiveIns;
124
125 MachineRegisterInfo(const MachineRegisterInfo&) = delete;
126 void operator=(const MachineRegisterInfo&) = delete;
127 public:
128 explicit MachineRegisterInfo(MachineFunction *MF);
129
getTargetRegisterInfo()130 const TargetRegisterInfo *getTargetRegisterInfo() const {
131 return MF->getSubtarget().getRegisterInfo();
132 }
133
resetDelegate(Delegate * delegate)134 void resetDelegate(Delegate *delegate) {
135 // Ensure another delegate does not take over unless the current
136 // delegate first unattaches itself. If we ever need to multicast
137 // notifications, we will need to change to using a list.
138 assert(TheDelegate == delegate &&
139 "Only the current delegate can perform reset!");
140 TheDelegate = nullptr;
141 }
142
setDelegate(Delegate * delegate)143 void setDelegate(Delegate *delegate) {
144 assert(delegate && !TheDelegate &&
145 "Attempted to set delegate to null, or to change it without "
146 "first resetting it!");
147
148 TheDelegate = delegate;
149 }
150
151 //===--------------------------------------------------------------------===//
152 // Function State
153 //===--------------------------------------------------------------------===//
154
155 // isSSA - Returns true when the machine function is in SSA form. Early
156 // passes require the machine function to be in SSA form where every virtual
157 // register has a single defining instruction.
158 //
159 // The TwoAddressInstructionPass and PHIElimination passes take the machine
160 // function out of SSA form when they introduce multiple defs per virtual
161 // register.
isSSA()162 bool isSSA() const {
163 return MF->getProperties().hasProperty(
164 MachineFunctionProperties::Property::IsSSA);
165 }
166
167 // leaveSSA - Indicates that the machine function is no longer in SSA form.
leaveSSA()168 void leaveSSA() {
169 MF->getProperties().clear(MachineFunctionProperties::Property::IsSSA);
170 }
171
172 /// tracksLiveness - Returns true when tracking register liveness accurately.
173 /// (see MachineFUnctionProperties::Property description for details)
tracksLiveness()174 bool tracksLiveness() const {
175 return MF->getProperties().hasProperty(
176 MachineFunctionProperties::Property::TracksLiveness);
177 }
178
179 /// invalidateLiveness - Indicates that register liveness is no longer being
180 /// tracked accurately.
181 ///
182 /// This should be called by late passes that invalidate the liveness
183 /// information.
invalidateLiveness()184 void invalidateLiveness() {
185 MF->getProperties().clear(
186 MachineFunctionProperties::Property::TracksLiveness);
187 }
188
189 /// Returns true if liveness for register class @p RC should be tracked at
190 /// the subregister level.
shouldTrackSubRegLiveness(const TargetRegisterClass & RC)191 bool shouldTrackSubRegLiveness(const TargetRegisterClass &RC) const {
192 return subRegLivenessEnabled() && RC.HasDisjunctSubRegs;
193 }
shouldTrackSubRegLiveness(unsigned VReg)194 bool shouldTrackSubRegLiveness(unsigned VReg) const {
195 assert(TargetRegisterInfo::isVirtualRegister(VReg) && "Must pass a VReg");
196 return shouldTrackSubRegLiveness(*getRegClass(VReg));
197 }
subRegLivenessEnabled()198 bool subRegLivenessEnabled() const {
199 return TracksSubRegLiveness;
200 }
201
202 void enableSubRegLiveness(bool Enable = true) {
203 TracksSubRegLiveness = Enable;
204 }
205
206 //===--------------------------------------------------------------------===//
207 // Register Info
208 //===--------------------------------------------------------------------===//
209
210 // Strictly for use by MachineInstr.cpp.
211 void addRegOperandToUseList(MachineOperand *MO);
212
213 // Strictly for use by MachineInstr.cpp.
214 void removeRegOperandFromUseList(MachineOperand *MO);
215
216 // Strictly for use by MachineInstr.cpp.
217 void moveOperands(MachineOperand *Dst, MachineOperand *Src, unsigned NumOps);
218
219 /// Verify the sanity of the use list for Reg.
220 void verifyUseList(unsigned Reg) const;
221
222 /// Verify the use list of all registers.
223 void verifyUseLists() const;
224
225 /// reg_begin/reg_end - Provide iteration support to walk over all definitions
226 /// and uses of a register within the MachineFunction that corresponds to this
227 /// MachineRegisterInfo object.
228 template<bool Uses, bool Defs, bool SkipDebug,
229 bool ByOperand, bool ByInstr, bool ByBundle>
230 class defusechain_iterator;
231 template<bool Uses, bool Defs, bool SkipDebug,
232 bool ByOperand, bool ByInstr, bool ByBundle>
233 class defusechain_instr_iterator;
234
235 // Make it a friend so it can access getNextOperandForReg().
236 template<bool, bool, bool, bool, bool, bool>
237 friend class defusechain_iterator;
238 template<bool, bool, bool, bool, bool, bool>
239 friend class defusechain_instr_iterator;
240
241
242
243 /// reg_iterator/reg_begin/reg_end - Walk all defs and uses of the specified
244 /// register.
245 typedef defusechain_iterator<true,true,false,true,false,false>
246 reg_iterator;
reg_begin(unsigned RegNo)247 reg_iterator reg_begin(unsigned RegNo) const {
248 return reg_iterator(getRegUseDefListHead(RegNo));
249 }
reg_end()250 static reg_iterator reg_end() { return reg_iterator(nullptr); }
251
reg_operands(unsigned Reg)252 inline iterator_range<reg_iterator> reg_operands(unsigned Reg) const {
253 return make_range(reg_begin(Reg), reg_end());
254 }
255
256 /// reg_instr_iterator/reg_instr_begin/reg_instr_end - Walk all defs and uses
257 /// of the specified register, stepping by MachineInstr.
258 typedef defusechain_instr_iterator<true,true,false,false,true,false>
259 reg_instr_iterator;
reg_instr_begin(unsigned RegNo)260 reg_instr_iterator reg_instr_begin(unsigned RegNo) const {
261 return reg_instr_iterator(getRegUseDefListHead(RegNo));
262 }
reg_instr_end()263 static reg_instr_iterator reg_instr_end() {
264 return reg_instr_iterator(nullptr);
265 }
266
267 inline iterator_range<reg_instr_iterator>
reg_instructions(unsigned Reg)268 reg_instructions(unsigned Reg) const {
269 return make_range(reg_instr_begin(Reg), reg_instr_end());
270 }
271
272 /// reg_bundle_iterator/reg_bundle_begin/reg_bundle_end - Walk all defs and uses
273 /// of the specified register, stepping by bundle.
274 typedef defusechain_instr_iterator<true,true,false,false,false,true>
275 reg_bundle_iterator;
reg_bundle_begin(unsigned RegNo)276 reg_bundle_iterator reg_bundle_begin(unsigned RegNo) const {
277 return reg_bundle_iterator(getRegUseDefListHead(RegNo));
278 }
reg_bundle_end()279 static reg_bundle_iterator reg_bundle_end() {
280 return reg_bundle_iterator(nullptr);
281 }
282
reg_bundles(unsigned Reg)283 inline iterator_range<reg_bundle_iterator> reg_bundles(unsigned Reg) const {
284 return make_range(reg_bundle_begin(Reg), reg_bundle_end());
285 }
286
287 /// reg_empty - Return true if there are no instructions using or defining the
288 /// specified register (it may be live-in).
reg_empty(unsigned RegNo)289 bool reg_empty(unsigned RegNo) const { return reg_begin(RegNo) == reg_end(); }
290
291 /// reg_nodbg_iterator/reg_nodbg_begin/reg_nodbg_end - Walk all defs and uses
292 /// of the specified register, skipping those marked as Debug.
293 typedef defusechain_iterator<true,true,true,true,false,false>
294 reg_nodbg_iterator;
reg_nodbg_begin(unsigned RegNo)295 reg_nodbg_iterator reg_nodbg_begin(unsigned RegNo) const {
296 return reg_nodbg_iterator(getRegUseDefListHead(RegNo));
297 }
reg_nodbg_end()298 static reg_nodbg_iterator reg_nodbg_end() {
299 return reg_nodbg_iterator(nullptr);
300 }
301
302 inline iterator_range<reg_nodbg_iterator>
reg_nodbg_operands(unsigned Reg)303 reg_nodbg_operands(unsigned Reg) const {
304 return make_range(reg_nodbg_begin(Reg), reg_nodbg_end());
305 }
306
307 /// reg_instr_nodbg_iterator/reg_instr_nodbg_begin/reg_instr_nodbg_end - Walk
308 /// all defs and uses of the specified register, stepping by MachineInstr,
309 /// skipping those marked as Debug.
310 typedef defusechain_instr_iterator<true,true,true,false,true,false>
311 reg_instr_nodbg_iterator;
reg_instr_nodbg_begin(unsigned RegNo)312 reg_instr_nodbg_iterator reg_instr_nodbg_begin(unsigned RegNo) const {
313 return reg_instr_nodbg_iterator(getRegUseDefListHead(RegNo));
314 }
reg_instr_nodbg_end()315 static reg_instr_nodbg_iterator reg_instr_nodbg_end() {
316 return reg_instr_nodbg_iterator(nullptr);
317 }
318
319 inline iterator_range<reg_instr_nodbg_iterator>
reg_nodbg_instructions(unsigned Reg)320 reg_nodbg_instructions(unsigned Reg) const {
321 return make_range(reg_instr_nodbg_begin(Reg), reg_instr_nodbg_end());
322 }
323
324 /// reg_bundle_nodbg_iterator/reg_bundle_nodbg_begin/reg_bundle_nodbg_end - Walk
325 /// all defs and uses of the specified register, stepping by bundle,
326 /// skipping those marked as Debug.
327 typedef defusechain_instr_iterator<true,true,true,false,false,true>
328 reg_bundle_nodbg_iterator;
reg_bundle_nodbg_begin(unsigned RegNo)329 reg_bundle_nodbg_iterator reg_bundle_nodbg_begin(unsigned RegNo) const {
330 return reg_bundle_nodbg_iterator(getRegUseDefListHead(RegNo));
331 }
reg_bundle_nodbg_end()332 static reg_bundle_nodbg_iterator reg_bundle_nodbg_end() {
333 return reg_bundle_nodbg_iterator(nullptr);
334 }
335
336 inline iterator_range<reg_bundle_nodbg_iterator>
reg_nodbg_bundles(unsigned Reg)337 reg_nodbg_bundles(unsigned Reg) const {
338 return make_range(reg_bundle_nodbg_begin(Reg), reg_bundle_nodbg_end());
339 }
340
341 /// reg_nodbg_empty - Return true if the only instructions using or defining
342 /// Reg are Debug instructions.
reg_nodbg_empty(unsigned RegNo)343 bool reg_nodbg_empty(unsigned RegNo) const {
344 return reg_nodbg_begin(RegNo) == reg_nodbg_end();
345 }
346
347 /// def_iterator/def_begin/def_end - Walk all defs of the specified register.
348 typedef defusechain_iterator<false,true,false,true,false,false>
349 def_iterator;
def_begin(unsigned RegNo)350 def_iterator def_begin(unsigned RegNo) const {
351 return def_iterator(getRegUseDefListHead(RegNo));
352 }
def_end()353 static def_iterator def_end() { return def_iterator(nullptr); }
354
def_operands(unsigned Reg)355 inline iterator_range<def_iterator> def_operands(unsigned Reg) const {
356 return make_range(def_begin(Reg), def_end());
357 }
358
359 /// def_instr_iterator/def_instr_begin/def_instr_end - Walk all defs of the
360 /// specified register, stepping by MachineInst.
361 typedef defusechain_instr_iterator<false,true,false,false,true,false>
362 def_instr_iterator;
def_instr_begin(unsigned RegNo)363 def_instr_iterator def_instr_begin(unsigned RegNo) const {
364 return def_instr_iterator(getRegUseDefListHead(RegNo));
365 }
def_instr_end()366 static def_instr_iterator def_instr_end() {
367 return def_instr_iterator(nullptr);
368 }
369
370 inline iterator_range<def_instr_iterator>
def_instructions(unsigned Reg)371 def_instructions(unsigned Reg) const {
372 return make_range(def_instr_begin(Reg), def_instr_end());
373 }
374
375 /// def_bundle_iterator/def_bundle_begin/def_bundle_end - Walk all defs of the
376 /// specified register, stepping by bundle.
377 typedef defusechain_instr_iterator<false,true,false,false,false,true>
378 def_bundle_iterator;
def_bundle_begin(unsigned RegNo)379 def_bundle_iterator def_bundle_begin(unsigned RegNo) const {
380 return def_bundle_iterator(getRegUseDefListHead(RegNo));
381 }
def_bundle_end()382 static def_bundle_iterator def_bundle_end() {
383 return def_bundle_iterator(nullptr);
384 }
385
def_bundles(unsigned Reg)386 inline iterator_range<def_bundle_iterator> def_bundles(unsigned Reg) const {
387 return make_range(def_bundle_begin(Reg), def_bundle_end());
388 }
389
390 /// def_empty - Return true if there are no instructions defining the
391 /// specified register (it may be live-in).
def_empty(unsigned RegNo)392 bool def_empty(unsigned RegNo) const { return def_begin(RegNo) == def_end(); }
393
394 /// Return true if there is exactly one operand defining the specified
395 /// register.
hasOneDef(unsigned RegNo)396 bool hasOneDef(unsigned RegNo) const {
397 def_iterator DI = def_begin(RegNo);
398 if (DI == def_end())
399 return false;
400 return ++DI == def_end();
401 }
402
403 /// use_iterator/use_begin/use_end - Walk all uses of the specified register.
404 typedef defusechain_iterator<true,false,false,true,false,false>
405 use_iterator;
use_begin(unsigned RegNo)406 use_iterator use_begin(unsigned RegNo) const {
407 return use_iterator(getRegUseDefListHead(RegNo));
408 }
use_end()409 static use_iterator use_end() { return use_iterator(nullptr); }
410
use_operands(unsigned Reg)411 inline iterator_range<use_iterator> use_operands(unsigned Reg) const {
412 return make_range(use_begin(Reg), use_end());
413 }
414
415 /// use_instr_iterator/use_instr_begin/use_instr_end - Walk all uses of the
416 /// specified register, stepping by MachineInstr.
417 typedef defusechain_instr_iterator<true,false,false,false,true,false>
418 use_instr_iterator;
use_instr_begin(unsigned RegNo)419 use_instr_iterator use_instr_begin(unsigned RegNo) const {
420 return use_instr_iterator(getRegUseDefListHead(RegNo));
421 }
use_instr_end()422 static use_instr_iterator use_instr_end() {
423 return use_instr_iterator(nullptr);
424 }
425
426 inline iterator_range<use_instr_iterator>
use_instructions(unsigned Reg)427 use_instructions(unsigned Reg) const {
428 return make_range(use_instr_begin(Reg), use_instr_end());
429 }
430
431 /// use_bundle_iterator/use_bundle_begin/use_bundle_end - Walk all uses of the
432 /// specified register, stepping by bundle.
433 typedef defusechain_instr_iterator<true,false,false,false,false,true>
434 use_bundle_iterator;
use_bundle_begin(unsigned RegNo)435 use_bundle_iterator use_bundle_begin(unsigned RegNo) const {
436 return use_bundle_iterator(getRegUseDefListHead(RegNo));
437 }
use_bundle_end()438 static use_bundle_iterator use_bundle_end() {
439 return use_bundle_iterator(nullptr);
440 }
441
use_bundles(unsigned Reg)442 inline iterator_range<use_bundle_iterator> use_bundles(unsigned Reg) const {
443 return make_range(use_bundle_begin(Reg), use_bundle_end());
444 }
445
446 /// use_empty - Return true if there are no instructions using the specified
447 /// register.
use_empty(unsigned RegNo)448 bool use_empty(unsigned RegNo) const { return use_begin(RegNo) == use_end(); }
449
450 /// hasOneUse - Return true if there is exactly one instruction using the
451 /// specified register.
hasOneUse(unsigned RegNo)452 bool hasOneUse(unsigned RegNo) const {
453 use_iterator UI = use_begin(RegNo);
454 if (UI == use_end())
455 return false;
456 return ++UI == use_end();
457 }
458
459 /// use_nodbg_iterator/use_nodbg_begin/use_nodbg_end - Walk all uses of the
460 /// specified register, skipping those marked as Debug.
461 typedef defusechain_iterator<true,false,true,true,false,false>
462 use_nodbg_iterator;
use_nodbg_begin(unsigned RegNo)463 use_nodbg_iterator use_nodbg_begin(unsigned RegNo) const {
464 return use_nodbg_iterator(getRegUseDefListHead(RegNo));
465 }
use_nodbg_end()466 static use_nodbg_iterator use_nodbg_end() {
467 return use_nodbg_iterator(nullptr);
468 }
469
470 inline iterator_range<use_nodbg_iterator>
use_nodbg_operands(unsigned Reg)471 use_nodbg_operands(unsigned Reg) const {
472 return make_range(use_nodbg_begin(Reg), use_nodbg_end());
473 }
474
475 /// use_instr_nodbg_iterator/use_instr_nodbg_begin/use_instr_nodbg_end - Walk
476 /// all uses of the specified register, stepping by MachineInstr, skipping
477 /// those marked as Debug.
478 typedef defusechain_instr_iterator<true,false,true,false,true,false>
479 use_instr_nodbg_iterator;
use_instr_nodbg_begin(unsigned RegNo)480 use_instr_nodbg_iterator use_instr_nodbg_begin(unsigned RegNo) const {
481 return use_instr_nodbg_iterator(getRegUseDefListHead(RegNo));
482 }
use_instr_nodbg_end()483 static use_instr_nodbg_iterator use_instr_nodbg_end() {
484 return use_instr_nodbg_iterator(nullptr);
485 }
486
487 inline iterator_range<use_instr_nodbg_iterator>
use_nodbg_instructions(unsigned Reg)488 use_nodbg_instructions(unsigned Reg) const {
489 return make_range(use_instr_nodbg_begin(Reg), use_instr_nodbg_end());
490 }
491
492 /// use_bundle_nodbg_iterator/use_bundle_nodbg_begin/use_bundle_nodbg_end - Walk
493 /// all uses of the specified register, stepping by bundle, skipping
494 /// those marked as Debug.
495 typedef defusechain_instr_iterator<true,false,true,false,false,true>
496 use_bundle_nodbg_iterator;
use_bundle_nodbg_begin(unsigned RegNo)497 use_bundle_nodbg_iterator use_bundle_nodbg_begin(unsigned RegNo) const {
498 return use_bundle_nodbg_iterator(getRegUseDefListHead(RegNo));
499 }
use_bundle_nodbg_end()500 static use_bundle_nodbg_iterator use_bundle_nodbg_end() {
501 return use_bundle_nodbg_iterator(nullptr);
502 }
503
504 inline iterator_range<use_bundle_nodbg_iterator>
use_nodbg_bundles(unsigned Reg)505 use_nodbg_bundles(unsigned Reg) const {
506 return make_range(use_bundle_nodbg_begin(Reg), use_bundle_nodbg_end());
507 }
508
509 /// use_nodbg_empty - Return true if there are no non-Debug instructions
510 /// using the specified register.
use_nodbg_empty(unsigned RegNo)511 bool use_nodbg_empty(unsigned RegNo) const {
512 return use_nodbg_begin(RegNo) == use_nodbg_end();
513 }
514
515 /// hasOneNonDBGUse - Return true if there is exactly one non-Debug
516 /// instruction using the specified register.
517 bool hasOneNonDBGUse(unsigned RegNo) const;
518
519 /// replaceRegWith - Replace all instances of FromReg with ToReg in the
520 /// machine function. This is like llvm-level X->replaceAllUsesWith(Y),
521 /// except that it also changes any definitions of the register as well.
522 ///
523 /// Note that it is usually necessary to first constrain ToReg's register
524 /// class to match the FromReg constraints using:
525 ///
526 /// constrainRegClass(ToReg, getRegClass(FromReg))
527 ///
528 /// That function will return NULL if the virtual registers have incompatible
529 /// constraints.
530 ///
531 /// Note that if ToReg is a physical register the function will replace and
532 /// apply sub registers to ToReg in order to obtain a final/proper physical
533 /// register.
534 void replaceRegWith(unsigned FromReg, unsigned ToReg);
535
536 /// getVRegDef - Return the machine instr that defines the specified virtual
537 /// register or null if none is found. This assumes that the code is in SSA
538 /// form, so there should only be one definition.
539 MachineInstr *getVRegDef(unsigned Reg) const;
540
541 /// getUniqueVRegDef - Return the unique machine instr that defines the
542 /// specified virtual register or null if none is found. If there are
543 /// multiple definitions or no definition, return null.
544 MachineInstr *getUniqueVRegDef(unsigned Reg) const;
545
546 /// clearKillFlags - Iterate over all the uses of the given register and
547 /// clear the kill flag from the MachineOperand. This function is used by
548 /// optimization passes which extend register lifetimes and need only
549 /// preserve conservative kill flag information.
550 void clearKillFlags(unsigned Reg) const;
551
552 #ifndef NDEBUG
553 void dumpUses(unsigned RegNo) const;
554 #endif
555
556 /// isConstantPhysReg - Returns true if PhysReg is unallocatable and constant
557 /// throughout the function. It is safe to move instructions that read such
558 /// a physreg.
559 bool isConstantPhysReg(unsigned PhysReg, const MachineFunction &MF) const;
560
561 /// Get an iterator over the pressure sets affected by the given physical or
562 /// virtual register. If RegUnit is physical, it must be a register unit (from
563 /// MCRegUnitIterator).
564 PSetIterator getPressureSets(unsigned RegUnit) const;
565
566 //===--------------------------------------------------------------------===//
567 // Virtual Register Info
568 //===--------------------------------------------------------------------===//
569
570 /// Return the register class of the specified virtual register.
571 /// This shouldn't be used directly unless \p Reg has a register class.
572 /// \see getRegClassOrNull when this might happen.
573 ///
getRegClass(unsigned Reg)574 const TargetRegisterClass *getRegClass(unsigned Reg) const {
575 assert(VRegInfo[Reg].first.is<const TargetRegisterClass *>() &&
576 "Register class not set, wrong accessor");
577 return VRegInfo[Reg].first.get<const TargetRegisterClass *>();
578 }
579
580 /// Return the register class of \p Reg, or null if Reg has not been assigned
581 /// a register class yet.
582 ///
583 /// \note A null register class can only happen when these two
584 /// conditions are met:
585 /// 1. Generic virtual registers are created.
586 /// 2. The machine function has not completely been through the
587 /// instruction selection process.
588 /// None of this condition is possible without GlobalISel for now.
589 /// In other words, if GlobalISel is not used or if the query happens after
590 /// the select pass, using getRegClass is safe.
getRegClassOrNull(unsigned Reg)591 const TargetRegisterClass *getRegClassOrNull(unsigned Reg) const {
592 const RegClassOrRegBank &Val = VRegInfo[Reg].first;
593 return Val.dyn_cast<const TargetRegisterClass *>();
594 }
595
596 /// Return the register bank of \p Reg, or null if Reg has not been assigned
597 /// a register bank or has been assigned a register class.
598 /// \note It is possible to get the register bank from the register class via
599 /// RegisterBankInfo::getRegBankFromRegClass.
600 ///
getRegBankOrNull(unsigned Reg)601 const RegisterBank *getRegBankOrNull(unsigned Reg) const {
602 const RegClassOrRegBank &Val = VRegInfo[Reg].first;
603 return Val.dyn_cast<const RegisterBank *>();
604 }
605
606 /// Return the register bank or register class of \p Reg.
607 /// \note Before the register bank gets assigned (i.e., before the
608 /// RegBankSelect pass) \p Reg may not have either.
609 ///
getRegClassOrRegBank(unsigned Reg)610 const RegClassOrRegBank &getRegClassOrRegBank(unsigned Reg) const {
611 return VRegInfo[Reg].first;
612 }
613
614 /// setRegClass - Set the register class of the specified virtual register.
615 ///
616 void setRegClass(unsigned Reg, const TargetRegisterClass *RC);
617
618 /// Set the register bank to \p RegBank for \p Reg.
619 ///
620 void setRegBank(unsigned Reg, const RegisterBank &RegBank);
621
622 /// constrainRegClass - Constrain the register class of the specified virtual
623 /// register to be a common subclass of RC and the current register class,
624 /// but only if the new class has at least MinNumRegs registers. Return the
625 /// new register class, or NULL if no such class exists.
626 /// This should only be used when the constraint is known to be trivial, like
627 /// GR32 -> GR32_NOSP. Beware of increasing register pressure.
628 ///
629 const TargetRegisterClass *constrainRegClass(unsigned Reg,
630 const TargetRegisterClass *RC,
631 unsigned MinNumRegs = 0);
632
633 /// recomputeRegClass - Try to find a legal super-class of Reg's register
634 /// class that still satisfies the constraints from the instructions using
635 /// Reg. Returns true if Reg was upgraded.
636 ///
637 /// This method can be used after constraints have been removed from a
638 /// virtual register, for example after removing instructions or splitting
639 /// the live range.
640 ///
641 bool recomputeRegClass(unsigned Reg);
642
643 /// createVirtualRegister - Create and return a new virtual register in the
644 /// function with the specified register class.
645 ///
646 unsigned createVirtualRegister(const TargetRegisterClass *RegClass);
647
648 /// Get the size in bits of \p VReg or 0 if VReg is not a generic
649 /// (target independent) virtual register.
650 unsigned getSize(unsigned VReg) const;
651
652 /// Set the size in bits of \p VReg to \p Size.
653 /// Although the size should be set at build time, mir infrastructure
654 /// is not yet able to do it.
655 void setSize(unsigned VReg, unsigned Size);
656
657 /// Create and return a new generic virtual register with a size of \p Size.
658 /// \pre Size > 0.
659 unsigned createGenericVirtualRegister(unsigned Size);
660
661 /// getNumVirtRegs - Return the number of virtual registers created.
662 ///
getNumVirtRegs()663 unsigned getNumVirtRegs() const { return VRegInfo.size(); }
664
665 /// clearVirtRegs - Remove all virtual registers (after physreg assignment).
666 void clearVirtRegs();
667
668 /// setRegAllocationHint - Specify a register allocation hint for the
669 /// specified virtual register.
setRegAllocationHint(unsigned VReg,unsigned Type,unsigned PrefReg)670 void setRegAllocationHint(unsigned VReg, unsigned Type, unsigned PrefReg) {
671 assert(TargetRegisterInfo::isVirtualRegister(VReg));
672 RegAllocHints[VReg].first = Type;
673 RegAllocHints[VReg].second = PrefReg;
674 }
675
676 /// Specify the preferred register allocation hint for the specified virtual
677 /// register.
setSimpleHint(unsigned VReg,unsigned PrefReg)678 void setSimpleHint(unsigned VReg, unsigned PrefReg) {
679 setRegAllocationHint(VReg, /*Type=*/0, PrefReg);
680 }
681
682 /// getRegAllocationHint - Return the register allocation hint for the
683 /// specified virtual register.
684 std::pair<unsigned, unsigned>
getRegAllocationHint(unsigned VReg)685 getRegAllocationHint(unsigned VReg) const {
686 assert(TargetRegisterInfo::isVirtualRegister(VReg));
687 return RegAllocHints[VReg];
688 }
689
690 /// getSimpleHint - Return the preferred register allocation hint, or 0 if a
691 /// standard simple hint (Type == 0) is not set.
getSimpleHint(unsigned VReg)692 unsigned getSimpleHint(unsigned VReg) const {
693 assert(TargetRegisterInfo::isVirtualRegister(VReg));
694 std::pair<unsigned, unsigned> Hint = getRegAllocationHint(VReg);
695 return Hint.first ? 0 : Hint.second;
696 }
697
698 /// markUsesInDebugValueAsUndef - Mark every DBG_VALUE referencing the
699 /// specified register as undefined which causes the DBG_VALUE to be
700 /// deleted during LiveDebugVariables analysis.
701 void markUsesInDebugValueAsUndef(unsigned Reg) const;
702
703 /// Return true if the specified register is modified in this function.
704 /// This checks that no defining machine operands exist for the register or
705 /// any of its aliases. Definitions found on functions marked noreturn are
706 /// ignored, to consider them pass 'true' for optional parameter
707 /// SkipNoReturnDef. The register is also considered modified when it is set
708 /// in the UsedPhysRegMask.
709 bool isPhysRegModified(unsigned PhysReg, bool SkipNoReturnDef = false) const;
710
711 /// Return true if the specified register is modified or read in this
712 /// function. This checks that no machine operands exist for the register or
713 /// any of its aliases. The register is also considered used when it is set
714 /// in the UsedPhysRegMask.
715 bool isPhysRegUsed(unsigned PhysReg) const;
716
717 /// addPhysRegsUsedFromRegMask - Mark any registers not in RegMask as used.
718 /// This corresponds to the bit mask attached to register mask operands.
addPhysRegsUsedFromRegMask(const uint32_t * RegMask)719 void addPhysRegsUsedFromRegMask(const uint32_t *RegMask) {
720 UsedPhysRegMask.setBitsNotInMask(RegMask);
721 }
722
getUsedPhysRegsMask()723 const BitVector &getUsedPhysRegsMask() const { return UsedPhysRegMask; }
724
setUsedPhysRegMask(BitVector & Mask)725 void setUsedPhysRegMask(BitVector &Mask) { UsedPhysRegMask = Mask; }
726
727 //===--------------------------------------------------------------------===//
728 // Reserved Register Info
729 //===--------------------------------------------------------------------===//
730 //
731 // The set of reserved registers must be invariant during register
732 // allocation. For example, the target cannot suddenly decide it needs a
733 // frame pointer when the register allocator has already used the frame
734 // pointer register for something else.
735 //
736 // These methods can be used by target hooks like hasFP() to avoid changing
737 // the reserved register set during register allocation.
738
739 /// freezeReservedRegs - Called by the register allocator to freeze the set
740 /// of reserved registers before allocation begins.
741 void freezeReservedRegs(const MachineFunction&);
742
743 /// reservedRegsFrozen - Returns true after freezeReservedRegs() was called
744 /// to ensure the set of reserved registers stays constant.
reservedRegsFrozen()745 bool reservedRegsFrozen() const {
746 return !ReservedRegs.empty();
747 }
748
749 /// canReserveReg - Returns true if PhysReg can be used as a reserved
750 /// register. Any register can be reserved before freezeReservedRegs() is
751 /// called.
canReserveReg(unsigned PhysReg)752 bool canReserveReg(unsigned PhysReg) const {
753 return !reservedRegsFrozen() || ReservedRegs.test(PhysReg);
754 }
755
756 /// getReservedRegs - Returns a reference to the frozen set of reserved
757 /// registers. This method should always be preferred to calling
758 /// TRI::getReservedRegs() when possible.
getReservedRegs()759 const BitVector &getReservedRegs() const {
760 assert(reservedRegsFrozen() &&
761 "Reserved registers haven't been frozen yet. "
762 "Use TRI::getReservedRegs().");
763 return ReservedRegs;
764 }
765
766 /// isReserved - Returns true when PhysReg is a reserved register.
767 ///
768 /// Reserved registers may belong to an allocatable register class, but the
769 /// target has explicitly requested that they are not used.
770 ///
isReserved(unsigned PhysReg)771 bool isReserved(unsigned PhysReg) const {
772 return getReservedRegs().test(PhysReg);
773 }
774
775 /// isAllocatable - Returns true when PhysReg belongs to an allocatable
776 /// register class and it hasn't been reserved.
777 ///
778 /// Allocatable registers may show up in the allocation order of some virtual
779 /// register, so a register allocator needs to track its liveness and
780 /// availability.
isAllocatable(unsigned PhysReg)781 bool isAllocatable(unsigned PhysReg) const {
782 return getTargetRegisterInfo()->isInAllocatableClass(PhysReg) &&
783 !isReserved(PhysReg);
784 }
785
786 //===--------------------------------------------------------------------===//
787 // LiveIn Management
788 //===--------------------------------------------------------------------===//
789
790 /// addLiveIn - Add the specified register as a live-in. Note that it
791 /// is an error to add the same register to the same set more than once.
792 void addLiveIn(unsigned Reg, unsigned vreg = 0) {
793 LiveIns.push_back(std::make_pair(Reg, vreg));
794 }
795
796 // Iteration support for the live-ins set. It's kept in sorted order
797 // by register number.
798 typedef std::vector<std::pair<unsigned,unsigned> >::const_iterator
799 livein_iterator;
livein_begin()800 livein_iterator livein_begin() const { return LiveIns.begin(); }
livein_end()801 livein_iterator livein_end() const { return LiveIns.end(); }
livein_empty()802 bool livein_empty() const { return LiveIns.empty(); }
803
804 bool isLiveIn(unsigned Reg) const;
805
806 /// getLiveInPhysReg - If VReg is a live-in virtual register, return the
807 /// corresponding live-in physical register.
808 unsigned getLiveInPhysReg(unsigned VReg) const;
809
810 /// getLiveInVirtReg - If PReg is a live-in physical register, return the
811 /// corresponding live-in physical register.
812 unsigned getLiveInVirtReg(unsigned PReg) const;
813
814 /// EmitLiveInCopies - Emit copies to initialize livein virtual registers
815 /// into the given entry block.
816 void EmitLiveInCopies(MachineBasicBlock *EntryMBB,
817 const TargetRegisterInfo &TRI,
818 const TargetInstrInfo &TII);
819
820 /// Returns a mask covering all bits that can appear in lane masks of
821 /// subregisters of the virtual register @p Reg.
822 LaneBitmask getMaxLaneMaskForVReg(unsigned Reg) const;
823
824 /// defusechain_iterator - This class provides iterator support for machine
825 /// operands in the function that use or define a specific register. If
826 /// ReturnUses is true it returns uses of registers, if ReturnDefs is true it
827 /// returns defs. If neither are true then you are silly and it always
828 /// returns end(). If SkipDebug is true it skips uses marked Debug
829 /// when incrementing.
830 template<bool ReturnUses, bool ReturnDefs, bool SkipDebug,
831 bool ByOperand, bool ByInstr, bool ByBundle>
832 class defusechain_iterator
833 : public std::iterator<std::forward_iterator_tag, MachineInstr, ptrdiff_t> {
834 MachineOperand *Op;
defusechain_iterator(MachineOperand * op)835 explicit defusechain_iterator(MachineOperand *op) : Op(op) {
836 // If the first node isn't one we're interested in, advance to one that
837 // we are interested in.
838 if (op) {
839 if ((!ReturnUses && op->isUse()) ||
840 (!ReturnDefs && op->isDef()) ||
841 (SkipDebug && op->isDebug()))
842 advance();
843 }
844 }
845 friend class MachineRegisterInfo;
846
advance()847 void advance() {
848 assert(Op && "Cannot increment end iterator!");
849 Op = getNextOperandForReg(Op);
850
851 // All defs come before the uses, so stop def_iterator early.
852 if (!ReturnUses) {
853 if (Op) {
854 if (Op->isUse())
855 Op = nullptr;
856 else
857 assert(!Op->isDebug() && "Can't have debug defs");
858 }
859 } else {
860 // If this is an operand we don't care about, skip it.
861 while (Op && ((!ReturnDefs && Op->isDef()) ||
862 (SkipDebug && Op->isDebug())))
863 Op = getNextOperandForReg(Op);
864 }
865 }
866 public:
867 typedef std::iterator<std::forward_iterator_tag,
868 MachineInstr, ptrdiff_t>::reference reference;
869 typedef std::iterator<std::forward_iterator_tag,
870 MachineInstr, ptrdiff_t>::pointer pointer;
871
defusechain_iterator()872 defusechain_iterator() : Op(nullptr) {}
873
874 bool operator==(const defusechain_iterator &x) const {
875 return Op == x.Op;
876 }
877 bool operator!=(const defusechain_iterator &x) const {
878 return !operator==(x);
879 }
880
881 /// atEnd - return true if this iterator is equal to reg_end() on the value.
atEnd()882 bool atEnd() const { return Op == nullptr; }
883
884 // Iterator traversal: forward iteration only
885 defusechain_iterator &operator++() { // Preincrement
886 assert(Op && "Cannot increment end iterator!");
887 if (ByOperand)
888 advance();
889 else if (ByInstr) {
890 MachineInstr *P = Op->getParent();
891 do {
892 advance();
893 } while (Op && Op->getParent() == P);
894 } else if (ByBundle) {
895 MachineInstr &P = getBundleStart(*Op->getParent());
896 do {
897 advance();
898 } while (Op && &getBundleStart(*Op->getParent()) == &P);
899 }
900
901 return *this;
902 }
903 defusechain_iterator operator++(int) { // Postincrement
904 defusechain_iterator tmp = *this; ++*this; return tmp;
905 }
906
907 /// getOperandNo - Return the operand # of this MachineOperand in its
908 /// MachineInstr.
getOperandNo()909 unsigned getOperandNo() const {
910 assert(Op && "Cannot dereference end iterator!");
911 return Op - &Op->getParent()->getOperand(0);
912 }
913
914 // Retrieve a reference to the current operand.
915 MachineOperand &operator*() const {
916 assert(Op && "Cannot dereference end iterator!");
917 return *Op;
918 }
919
920 MachineOperand *operator->() const {
921 assert(Op && "Cannot dereference end iterator!");
922 return Op;
923 }
924 };
925
926 /// defusechain_iterator - This class provides iterator support for machine
927 /// operands in the function that use or define a specific register. If
928 /// ReturnUses is true it returns uses of registers, if ReturnDefs is true it
929 /// returns defs. If neither are true then you are silly and it always
930 /// returns end(). If SkipDebug is true it skips uses marked Debug
931 /// when incrementing.
932 template<bool ReturnUses, bool ReturnDefs, bool SkipDebug,
933 bool ByOperand, bool ByInstr, bool ByBundle>
934 class defusechain_instr_iterator
935 : public std::iterator<std::forward_iterator_tag, MachineInstr, ptrdiff_t> {
936 MachineOperand *Op;
defusechain_instr_iterator(MachineOperand * op)937 explicit defusechain_instr_iterator(MachineOperand *op) : Op(op) {
938 // If the first node isn't one we're interested in, advance to one that
939 // we are interested in.
940 if (op) {
941 if ((!ReturnUses && op->isUse()) ||
942 (!ReturnDefs && op->isDef()) ||
943 (SkipDebug && op->isDebug()))
944 advance();
945 }
946 }
947 friend class MachineRegisterInfo;
948
advance()949 void advance() {
950 assert(Op && "Cannot increment end iterator!");
951 Op = getNextOperandForReg(Op);
952
953 // All defs come before the uses, so stop def_iterator early.
954 if (!ReturnUses) {
955 if (Op) {
956 if (Op->isUse())
957 Op = nullptr;
958 else
959 assert(!Op->isDebug() && "Can't have debug defs");
960 }
961 } else {
962 // If this is an operand we don't care about, skip it.
963 while (Op && ((!ReturnDefs && Op->isDef()) ||
964 (SkipDebug && Op->isDebug())))
965 Op = getNextOperandForReg(Op);
966 }
967 }
968 public:
969 typedef std::iterator<std::forward_iterator_tag,
970 MachineInstr, ptrdiff_t>::reference reference;
971 typedef std::iterator<std::forward_iterator_tag,
972 MachineInstr, ptrdiff_t>::pointer pointer;
973
defusechain_instr_iterator()974 defusechain_instr_iterator() : Op(nullptr) {}
975
976 bool operator==(const defusechain_instr_iterator &x) const {
977 return Op == x.Op;
978 }
979 bool operator!=(const defusechain_instr_iterator &x) const {
980 return !operator==(x);
981 }
982
983 /// atEnd - return true if this iterator is equal to reg_end() on the value.
atEnd()984 bool atEnd() const { return Op == nullptr; }
985
986 // Iterator traversal: forward iteration only
987 defusechain_instr_iterator &operator++() { // Preincrement
988 assert(Op && "Cannot increment end iterator!");
989 if (ByOperand)
990 advance();
991 else if (ByInstr) {
992 MachineInstr *P = Op->getParent();
993 do {
994 advance();
995 } while (Op && Op->getParent() == P);
996 } else if (ByBundle) {
997 MachineInstr &P = getBundleStart(*Op->getParent());
998 do {
999 advance();
1000 } while (Op && &getBundleStart(*Op->getParent()) == &P);
1001 }
1002
1003 return *this;
1004 }
1005 defusechain_instr_iterator operator++(int) { // Postincrement
1006 defusechain_instr_iterator tmp = *this; ++*this; return tmp;
1007 }
1008
1009 // Retrieve a reference to the current operand.
1010 MachineInstr &operator*() const {
1011 assert(Op && "Cannot dereference end iterator!");
1012 if (ByBundle)
1013 return getBundleStart(*Op->getParent());
1014 return *Op->getParent();
1015 }
1016
1017 MachineInstr *operator->() const { return &operator*(); }
1018 };
1019 };
1020
1021 /// Iterate over the pressure sets affected by the given physical or virtual
1022 /// register. If Reg is physical, it must be a register unit (from
1023 /// MCRegUnitIterator).
1024 class PSetIterator {
1025 const int *PSet;
1026 unsigned Weight;
1027 public:
PSetIterator()1028 PSetIterator(): PSet(nullptr), Weight(0) {}
PSetIterator(unsigned RegUnit,const MachineRegisterInfo * MRI)1029 PSetIterator(unsigned RegUnit, const MachineRegisterInfo *MRI) {
1030 const TargetRegisterInfo *TRI = MRI->getTargetRegisterInfo();
1031 if (TargetRegisterInfo::isVirtualRegister(RegUnit)) {
1032 const TargetRegisterClass *RC = MRI->getRegClass(RegUnit);
1033 PSet = TRI->getRegClassPressureSets(RC);
1034 Weight = TRI->getRegClassWeight(RC).RegWeight;
1035 }
1036 else {
1037 PSet = TRI->getRegUnitPressureSets(RegUnit);
1038 Weight = TRI->getRegUnitWeight(RegUnit);
1039 }
1040 if (*PSet == -1)
1041 PSet = nullptr;
1042 }
isValid()1043 bool isValid() const { return PSet; }
1044
getWeight()1045 unsigned getWeight() const { return Weight; }
1046
1047 unsigned operator*() const { return *PSet; }
1048
1049 void operator++() {
1050 assert(isValid() && "Invalid PSetIterator.");
1051 ++PSet;
1052 if (*PSet == -1)
1053 PSet = nullptr;
1054 }
1055 };
1056
1057 inline PSetIterator MachineRegisterInfo::
getPressureSets(unsigned RegUnit)1058 getPressureSets(unsigned RegUnit) const {
1059 return PSetIterator(RegUnit, this);
1060 }
1061
1062 } // End llvm namespace
1063
1064 #endif
1065