xref: /freebsd/contrib/llvm-project/llvm/include/llvm/CodeGen/MachineRegisterInfo.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
1 //===- llvm/CodeGen/MachineRegisterInfo.h -----------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines the MachineRegisterInfo class.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_CODEGEN_MACHINEREGISTERINFO_H
14 #define LLVM_CODEGEN_MACHINEREGISTERINFO_H
15 
16 #include "llvm/ADT/ArrayRef.h"
17 #include "llvm/ADT/BitVector.h"
18 #include "llvm/ADT/IndexedMap.h"
19 #include "llvm/ADT/PointerUnion.h"
20 #include "llvm/ADT/SmallPtrSet.h"
21 #include "llvm/ADT/SmallVector.h"
22 #include "llvm/ADT/StringSet.h"
23 #include "llvm/ADT/iterator_range.h"
24 #include "llvm/CodeGen/MachineBasicBlock.h"
25 #include "llvm/CodeGen/MachineFunction.h"
26 #include "llvm/CodeGen/MachineInstr.h"
27 #include "llvm/CodeGen/MachineInstrBundle.h"
28 #include "llvm/CodeGen/MachineOperand.h"
29 #include "llvm/CodeGen/RegisterBank.h"
30 #include "llvm/CodeGen/TargetRegisterInfo.h"
31 #include "llvm/CodeGen/TargetSubtargetInfo.h"
32 #include "llvm/MC/LaneBitmask.h"
33 #include "llvm/Support/Compiler.h"
34 #include <cassert>
35 #include <cstddef>
36 #include <cstdint>
37 #include <iterator>
38 #include <memory>
39 #include <utility>
40 #include <vector>
41 
42 namespace llvm {
43 
44 class PSetIterator;
45 
46 /// Convenient type to represent either a register class or a register bank.
47 using RegClassOrRegBank =
48     PointerUnion<const TargetRegisterClass *, const RegisterBank *>;
49 
50 /// MachineRegisterInfo - Keep track of information for virtual and physical
51 /// registers, including vreg register classes, use/def chains for registers,
52 /// etc.
53 class MachineRegisterInfo {
54 public:
55   class LLVM_ABI Delegate {
56     virtual void anchor();
57 
58   public:
59     virtual ~Delegate() = default;
60 
61     virtual void MRI_NoteNewVirtualRegister(Register Reg) = 0;
MRI_NoteCloneVirtualRegister(Register NewReg,Register SrcReg)62     virtual void MRI_NoteCloneVirtualRegister(Register NewReg,
63                                               Register SrcReg) {
64       MRI_NoteNewVirtualRegister(NewReg);
65     }
66   };
67 
68 private:
69   MachineFunction *MF;
70   SmallPtrSet<Delegate *, 1> TheDelegates;
71 
72   /// True if subregister liveness is tracked.
73   const bool TracksSubRegLiveness;
74 
75   /// VRegInfo - Information we keep for each virtual register.
76   ///
77   /// Each element in this list contains the register class of the vreg and the
78   /// start of the use/def list for the register.
79   IndexedMap<std::pair<RegClassOrRegBank, MachineOperand *>,
80              VirtReg2IndexFunctor>
81       VRegInfo;
82 
83   /// Map for recovering vreg name from vreg number.
84   /// This map is used by the MIR Printer.
85   IndexedMap<std::string, VirtReg2IndexFunctor> VReg2Name;
86 
87   /// StringSet that is used to unique vreg names.
88   StringSet<> VRegNames;
89 
90   /// The flag is true upon \p UpdatedCSRs initialization
91   /// and false otherwise.
92   bool IsUpdatedCSRsInitialized = false;
93 
94   /// Contains the updated callee saved register list.
95   /// As opposed to the static list defined in register info,
96   /// all registers that were disabled are removed from the list.
97   SmallVector<MCPhysReg, 16> UpdatedCSRs;
98 
99   /// RegAllocHints - This vector records register allocation hints for
100   /// virtual registers. For each virtual register, it keeps a pair of hint
101   /// type and hints vector making up the allocation hints. Only the first
102   /// hint may be target specific, and in that case this is reflected by the
103   /// first member of the pair being non-zero. If the hinted register is
104   /// virtual, it means the allocator should prefer the physical register
105   /// allocated to it if any.
106   IndexedMap<std::pair<unsigned, SmallVector<Register, 4>>,
107              VirtReg2IndexFunctor>
108       RegAllocHints;
109 
110   /// PhysRegUseDefLists - This is an array of the head of the use/def list for
111   /// physical registers.
112   std::unique_ptr<MachineOperand *[]> PhysRegUseDefLists;
113 
114   /// getRegUseDefListHead - Return the head pointer for the register use/def
115   /// list for the specified virtual or physical register.
getRegUseDefListHead(Register RegNo)116   MachineOperand *&getRegUseDefListHead(Register RegNo) {
117     if (RegNo.isVirtual())
118       return VRegInfo[RegNo.id()].second;
119     return PhysRegUseDefLists[RegNo.id()];
120   }
121 
getRegUseDefListHead(Register RegNo)122   MachineOperand *getRegUseDefListHead(Register RegNo) const {
123     if (RegNo.isVirtual())
124       return VRegInfo[RegNo.id()].second;
125     return PhysRegUseDefLists[RegNo.id()];
126   }
127 
128   /// Get the next element in the use-def chain.
getNextOperandForReg(const MachineOperand * MO)129   static MachineOperand *getNextOperandForReg(const MachineOperand *MO) {
130     assert(MO && MO->isReg() && "This is not a register operand!");
131     return MO->Contents.Reg.Next;
132   }
133 
134   /// UsedPhysRegMask - Additional used physregs including aliases.
135   /// This bit vector represents all the registers clobbered by function calls.
136   BitVector UsedPhysRegMask;
137 
138   /// ReservedRegs - This is a bit vector of reserved registers.  The target
139   /// may change its mind about which registers should be reserved.  This
140   /// vector is the frozen set of reserved registers when register allocation
141   /// started.
142   BitVector ReservedRegs;
143 
144   using VRegToTypeMap = IndexedMap<LLT, VirtReg2IndexFunctor>;
145   /// Map generic virtual registers to their low-level type.
146   VRegToTypeMap VRegToType;
147 
148   /// Keep track of the physical registers that are live in to the function.
149   /// Live in values are typically arguments in registers.  LiveIn values are
150   /// allowed to have virtual registers associated with them, stored in the
151   /// second element.
152   std::vector<std::pair<MCRegister, Register>> LiveIns;
153 
154 public:
155   LLVM_ABI explicit MachineRegisterInfo(MachineFunction *MF);
156   MachineRegisterInfo(const MachineRegisterInfo &) = delete;
157   MachineRegisterInfo &operator=(const MachineRegisterInfo &) = delete;
158 
getTargetRegisterInfo()159   const TargetRegisterInfo *getTargetRegisterInfo() const {
160     return MF->getSubtarget().getRegisterInfo();
161   }
162 
resetDelegate(Delegate * delegate)163   void resetDelegate(Delegate *delegate) {
164     // Ensure another delegate does not take over unless the current
165     // delegate first unattaches itself.
166     assert(TheDelegates.count(delegate) &&
167            "Only an existing delegate can perform reset!");
168     TheDelegates.erase(delegate);
169   }
170 
addDelegate(Delegate * delegate)171   void addDelegate(Delegate *delegate) {
172     assert(delegate && !TheDelegates.count(delegate) &&
173            "Attempted to add null delegate, or to change it without "
174            "first resetting it!");
175 
176     TheDelegates.insert(delegate);
177   }
178 
noteNewVirtualRegister(Register Reg)179   void noteNewVirtualRegister(Register Reg) {
180     for (auto *TheDelegate : TheDelegates)
181       TheDelegate->MRI_NoteNewVirtualRegister(Reg);
182   }
183 
noteCloneVirtualRegister(Register NewReg,Register SrcReg)184   void noteCloneVirtualRegister(Register NewReg, Register SrcReg) {
185     for (auto *TheDelegate : TheDelegates)
186       TheDelegate->MRI_NoteCloneVirtualRegister(NewReg, SrcReg);
187   }
188 
getMF()189   const MachineFunction &getMF() const { return *MF; }
190 
191   //===--------------------------------------------------------------------===//
192   // Function State
193   //===--------------------------------------------------------------------===//
194 
195   // isSSA - Returns true when the machine function is in SSA form. Early
196   // passes require the machine function to be in SSA form where every virtual
197   // register has a single defining instruction.
198   //
199   // The TwoAddressInstructionPass and PHIElimination passes take the machine
200   // function out of SSA form when they introduce multiple defs per virtual
201   // register.
isSSA()202   bool isSSA() const { return MF->getProperties().hasIsSSA(); }
203 
204   // leaveSSA - Indicates that the machine function is no longer in SSA form.
leaveSSA()205   void leaveSSA() { MF->getProperties().resetIsSSA(); }
206 
207   /// tracksLiveness - Returns true when tracking register liveness accurately.
208   /// (see MachineFUnctionProperties::Property description for details)
tracksLiveness()209   bool tracksLiveness() const {
210     return MF->getProperties().hasTracksLiveness();
211   }
212 
213   /// invalidateLiveness - Indicates that register liveness is no longer being
214   /// tracked accurately.
215   ///
216   /// This should be called by late passes that invalidate the liveness
217   /// information.
invalidateLiveness()218   void invalidateLiveness() { MF->getProperties().resetTracksLiveness(); }
219 
220   /// Returns true if liveness for register class @p RC should be tracked at
221   /// the subregister level.
shouldTrackSubRegLiveness(const TargetRegisterClass & RC)222   bool shouldTrackSubRegLiveness(const TargetRegisterClass &RC) const {
223     return subRegLivenessEnabled() && RC.HasDisjunctSubRegs;
224   }
shouldTrackSubRegLiveness(Register VReg)225   bool shouldTrackSubRegLiveness(Register VReg) const {
226     assert(VReg.isVirtual() && "Must pass a VReg");
227     const TargetRegisterClass *RC = getRegClassOrNull(VReg);
228     return LLVM_LIKELY(RC) ? shouldTrackSubRegLiveness(*RC) : false;
229   }
subRegLivenessEnabled()230   bool subRegLivenessEnabled() const {
231     return TracksSubRegLiveness;
232   }
233 
234   //===--------------------------------------------------------------------===//
235   // Register Info
236   //===--------------------------------------------------------------------===//
237 
238   /// Returns true if the updated CSR list was initialized and false otherwise.
isUpdatedCSRsInitialized()239   bool isUpdatedCSRsInitialized() const { return IsUpdatedCSRsInitialized; }
240 
241   /// Disables the register from the list of CSRs.
242   /// I.e. the register will not appear as part of the CSR mask.
243   /// \see UpdatedCalleeSavedRegs.
244   LLVM_ABI void disableCalleeSavedRegister(MCRegister Reg);
245 
246   /// Returns list of callee saved registers.
247   /// The function returns the updated CSR list (after taking into account
248   /// registers that are disabled from the CSR list).
249   LLVM_ABI const MCPhysReg *getCalleeSavedRegs() const;
250 
251   /// Sets the updated Callee Saved Registers list.
252   /// Notice that it will override ant previously disabled/saved CSRs.
253   LLVM_ABI void setCalleeSavedRegs(ArrayRef<MCPhysReg> CSRs);
254 
255   // Strictly for use by MachineInstr.cpp.
256   LLVM_ABI void addRegOperandToUseList(MachineOperand *MO);
257 
258   // Strictly for use by MachineInstr.cpp.
259   LLVM_ABI void removeRegOperandFromUseList(MachineOperand *MO);
260 
261   // Strictly for use by MachineInstr.cpp.
262   LLVM_ABI void moveOperands(MachineOperand *Dst, MachineOperand *Src,
263                              unsigned NumOps);
264 
265   /// Verify the sanity of the use list for Reg.
266   LLVM_ABI void verifyUseList(Register Reg) const;
267 
268   /// Verify the use list of all registers.
269   LLVM_ABI void verifyUseLists() const;
270 
271   /// reg_begin/reg_end - Provide iteration support to walk over all definitions
272   /// and uses of a register within the MachineFunction that corresponds to this
273   /// MachineRegisterInfo object.
274   template <bool Uses, bool Defs, bool SkipDebug, bool ByOperand, bool ByInstr>
275   class defusechain_iterator;
276   template <bool Uses, bool Defs, bool SkipDebug, bool ByInstr>
277   class defusechain_instr_iterator;
278 
279   // Make it a friend so it can access getNextOperandForReg().
280   template <bool, bool, bool, bool, bool> friend class defusechain_iterator;
281   template <bool, bool, bool, bool> friend class defusechain_instr_iterator;
282 
283   /// reg_iterator/reg_begin/reg_end - Walk all defs and uses of the specified
284   /// register.
285   using reg_iterator = defusechain_iterator<true, true, false, true, false>;
reg_begin(Register RegNo)286   reg_iterator reg_begin(Register RegNo) const {
287     return reg_iterator(getRegUseDefListHead(RegNo));
288   }
reg_end()289   static reg_iterator reg_end() { return reg_iterator(nullptr); }
290 
reg_operands(Register Reg)291   inline iterator_range<reg_iterator> reg_operands(Register Reg) const {
292     return make_range(reg_begin(Reg), reg_end());
293   }
294 
295   /// reg_instr_iterator/reg_instr_begin/reg_instr_end - Walk all defs and uses
296   /// of the specified register, stepping by MachineInstr.
297   using reg_instr_iterator =
298       defusechain_instr_iterator<true, true, false, /*ByInstr=*/true>;
reg_instr_begin(Register RegNo)299   reg_instr_iterator reg_instr_begin(Register RegNo) const {
300     return reg_instr_iterator(getRegUseDefListHead(RegNo));
301   }
reg_instr_end()302   static reg_instr_iterator reg_instr_end() {
303     return reg_instr_iterator(nullptr);
304   }
305 
306   inline iterator_range<reg_instr_iterator>
reg_instructions(Register Reg)307   reg_instructions(Register Reg) const {
308     return make_range(reg_instr_begin(Reg), reg_instr_end());
309   }
310 
311   /// reg_bundle_iterator/reg_bundle_begin/reg_bundle_end - Walk all defs and uses
312   /// of the specified register, stepping by bundle.
313   using reg_bundle_iterator =
314       defusechain_instr_iterator<true, true, false, /*ByInstr=*/false>;
reg_bundle_begin(Register RegNo)315   reg_bundle_iterator reg_bundle_begin(Register RegNo) const {
316     return reg_bundle_iterator(getRegUseDefListHead(RegNo));
317   }
reg_bundle_end()318   static reg_bundle_iterator reg_bundle_end() {
319     return reg_bundle_iterator(nullptr);
320   }
321 
reg_bundles(Register Reg)322   inline iterator_range<reg_bundle_iterator> reg_bundles(Register Reg) const {
323     return make_range(reg_bundle_begin(Reg), reg_bundle_end());
324   }
325 
326   /// reg_empty - Return true if there are no instructions using or defining the
327   /// specified register (it may be live-in).
reg_empty(Register RegNo)328   bool reg_empty(Register RegNo) const { return reg_begin(RegNo) == reg_end(); }
329 
330   /// reg_nodbg_iterator/reg_nodbg_begin/reg_nodbg_end - Walk all defs and uses
331   /// of the specified register, skipping those marked as Debug.
332   using reg_nodbg_iterator =
333       defusechain_iterator<true, true, true, true, false>;
reg_nodbg_begin(Register RegNo)334   reg_nodbg_iterator reg_nodbg_begin(Register RegNo) const {
335     return reg_nodbg_iterator(getRegUseDefListHead(RegNo));
336   }
reg_nodbg_end()337   static reg_nodbg_iterator reg_nodbg_end() {
338     return reg_nodbg_iterator(nullptr);
339   }
340 
341   inline iterator_range<reg_nodbg_iterator>
reg_nodbg_operands(Register Reg)342   reg_nodbg_operands(Register Reg) const {
343     return make_range(reg_nodbg_begin(Reg), reg_nodbg_end());
344   }
345 
346   /// reg_instr_nodbg_iterator/reg_instr_nodbg_begin/reg_instr_nodbg_end - Walk
347   /// all defs and uses of the specified register, stepping by MachineInstr,
348   /// skipping those marked as Debug.
349   using reg_instr_nodbg_iterator =
350       defusechain_instr_iterator<true, true, true, /*ByInstr=*/true>;
reg_instr_nodbg_begin(Register RegNo)351   reg_instr_nodbg_iterator reg_instr_nodbg_begin(Register RegNo) const {
352     return reg_instr_nodbg_iterator(getRegUseDefListHead(RegNo));
353   }
reg_instr_nodbg_end()354   static reg_instr_nodbg_iterator reg_instr_nodbg_end() {
355     return reg_instr_nodbg_iterator(nullptr);
356   }
357 
358   inline iterator_range<reg_instr_nodbg_iterator>
reg_nodbg_instructions(Register Reg)359   reg_nodbg_instructions(Register Reg) const {
360     return make_range(reg_instr_nodbg_begin(Reg), reg_instr_nodbg_end());
361   }
362 
363   /// reg_bundle_nodbg_iterator/reg_bundle_nodbg_begin/reg_bundle_nodbg_end - Walk
364   /// all defs and uses of the specified register, stepping by bundle,
365   /// skipping those marked as Debug.
366   using reg_bundle_nodbg_iterator =
367       defusechain_instr_iterator<true, true, true, /*ByInstr=*/false>;
reg_bundle_nodbg_begin(Register RegNo)368   reg_bundle_nodbg_iterator reg_bundle_nodbg_begin(Register RegNo) const {
369     return reg_bundle_nodbg_iterator(getRegUseDefListHead(RegNo));
370   }
reg_bundle_nodbg_end()371   static reg_bundle_nodbg_iterator reg_bundle_nodbg_end() {
372     return reg_bundle_nodbg_iterator(nullptr);
373   }
374 
375   inline iterator_range<reg_bundle_nodbg_iterator>
reg_nodbg_bundles(Register Reg)376   reg_nodbg_bundles(Register Reg) const {
377     return make_range(reg_bundle_nodbg_begin(Reg), reg_bundle_nodbg_end());
378   }
379 
380   /// reg_nodbg_empty - Return true if the only instructions using or defining
381   /// Reg are Debug instructions.
reg_nodbg_empty(Register RegNo)382   bool reg_nodbg_empty(Register RegNo) const {
383     return reg_nodbg_begin(RegNo) == reg_nodbg_end();
384   }
385 
386   /// def_iterator/def_begin/def_end - Walk all defs of the specified register.
387   using def_iterator = defusechain_iterator<false, true, false, true, false>;
def_begin(Register RegNo)388   def_iterator def_begin(Register RegNo) const {
389     return def_iterator(getRegUseDefListHead(RegNo));
390   }
def_end()391   static def_iterator def_end() { return def_iterator(nullptr); }
392 
def_operands(Register Reg)393   inline iterator_range<def_iterator> def_operands(Register Reg) const {
394     return make_range(def_begin(Reg), def_end());
395   }
396 
397   /// def_instr_iterator/def_instr_begin/def_instr_end - Walk all defs of the
398   /// specified register, stepping by MachineInst.
399   using def_instr_iterator =
400       defusechain_instr_iterator<false, true, false, /*ByInstr=*/true>;
def_instr_begin(Register RegNo)401   def_instr_iterator def_instr_begin(Register RegNo) const {
402     return def_instr_iterator(getRegUseDefListHead(RegNo));
403   }
def_instr_end()404   static def_instr_iterator def_instr_end() {
405     return def_instr_iterator(nullptr);
406   }
407 
408   inline iterator_range<def_instr_iterator>
def_instructions(Register Reg)409   def_instructions(Register Reg) const {
410     return make_range(def_instr_begin(Reg), def_instr_end());
411   }
412 
413   /// def_bundle_iterator/def_bundle_begin/def_bundle_end - Walk all defs of the
414   /// specified register, stepping by bundle.
415   using def_bundle_iterator =
416       defusechain_instr_iterator<false, true, false, /*ByInstr=*/false>;
def_bundle_begin(Register RegNo)417   def_bundle_iterator def_bundle_begin(Register RegNo) const {
418     return def_bundle_iterator(getRegUseDefListHead(RegNo));
419   }
def_bundle_end()420   static def_bundle_iterator def_bundle_end() {
421     return def_bundle_iterator(nullptr);
422   }
423 
def_bundles(Register Reg)424   inline iterator_range<def_bundle_iterator> def_bundles(Register Reg) const {
425     return make_range(def_bundle_begin(Reg), def_bundle_end());
426   }
427 
428   /// def_empty - Return true if there are no instructions defining the
429   /// specified register (it may be live-in).
def_empty(Register RegNo)430   bool def_empty(Register RegNo) const { return def_begin(RegNo) == def_end(); }
431 
getVRegName(Register Reg)432   StringRef getVRegName(Register Reg) const {
433     return VReg2Name.inBounds(Reg) ? StringRef(VReg2Name[Reg]) : "";
434   }
435 
insertVRegByName(StringRef Name,Register Reg)436   void insertVRegByName(StringRef Name, Register Reg) {
437     assert((Name.empty() || !VRegNames.contains(Name)) &&
438            "Named VRegs Must be Unique.");
439     if (!Name.empty()) {
440       VRegNames.insert(Name);
441       VReg2Name.grow(Reg);
442       VReg2Name[Reg] = Name.str();
443     }
444   }
445 
446   /// Return true if there is exactly one operand defining the specified
447   /// register.
hasOneDef(Register RegNo)448   bool hasOneDef(Register RegNo) const {
449     return hasSingleElement(def_operands(RegNo));
450   }
451 
452   /// Returns the defining operand if there is exactly one operand defining the
453   /// specified register, otherwise nullptr.
getOneDef(Register Reg)454   MachineOperand *getOneDef(Register Reg) const {
455     def_iterator DI = def_begin(Reg);
456     if (DI == def_end()) // No defs.
457       return nullptr;
458 
459     def_iterator OneDef = DI;
460     if (++DI == def_end())
461       return &*OneDef;
462     return nullptr; // Multiple defs.
463   }
464 
465   /// use_iterator/use_begin/use_end - Walk all uses of the specified register.
466   using use_iterator = defusechain_iterator<true, false, false, true, false>;
use_begin(Register RegNo)467   use_iterator use_begin(Register RegNo) const {
468     return use_iterator(getRegUseDefListHead(RegNo));
469   }
use_end()470   static use_iterator use_end() { return use_iterator(nullptr); }
471 
use_operands(Register Reg)472   inline iterator_range<use_iterator> use_operands(Register Reg) const {
473     return make_range(use_begin(Reg), use_end());
474   }
475 
476   /// use_instr_iterator/use_instr_begin/use_instr_end - Walk all uses of the
477   /// specified register, stepping by MachineInstr.
478   using use_instr_iterator =
479       defusechain_instr_iterator<true, false, false, /*ByInstr=*/true>;
use_instr_begin(Register RegNo)480   use_instr_iterator use_instr_begin(Register RegNo) const {
481     return use_instr_iterator(getRegUseDefListHead(RegNo));
482   }
use_instr_end()483   static use_instr_iterator use_instr_end() {
484     return use_instr_iterator(nullptr);
485   }
486 
487   inline iterator_range<use_instr_iterator>
use_instructions(Register Reg)488   use_instructions(Register Reg) const {
489     return make_range(use_instr_begin(Reg), use_instr_end());
490   }
491 
492   /// use_bundle_iterator/use_bundle_begin/use_bundle_end - Walk all uses of the
493   /// specified register, stepping by bundle.
494   using use_bundle_iterator =
495       defusechain_instr_iterator<true, false, false, /*ByInstr=*/false>;
use_bundle_begin(Register RegNo)496   use_bundle_iterator use_bundle_begin(Register RegNo) const {
497     return use_bundle_iterator(getRegUseDefListHead(RegNo));
498   }
use_bundle_end()499   static use_bundle_iterator use_bundle_end() {
500     return use_bundle_iterator(nullptr);
501   }
502 
use_bundles(Register Reg)503   inline iterator_range<use_bundle_iterator> use_bundles(Register Reg) const {
504     return make_range(use_bundle_begin(Reg), use_bundle_end());
505   }
506 
507   /// use_empty - Return true if there are no instructions using the specified
508   /// register.
use_empty(Register RegNo)509   bool use_empty(Register RegNo) const { return use_begin(RegNo) == use_end(); }
510 
511   /// hasOneUse - Return true if there is exactly one instruction using the
512   /// specified register.
hasOneUse(Register RegNo)513   bool hasOneUse(Register RegNo) const {
514     return hasSingleElement(use_operands(RegNo));
515   }
516 
517   /// use_nodbg_iterator/use_nodbg_begin/use_nodbg_end - Walk all uses of the
518   /// specified register, skipping those marked as Debug.
519   using use_nodbg_iterator =
520       defusechain_iterator<true, false, true, true, false>;
use_nodbg_begin(Register RegNo)521   use_nodbg_iterator use_nodbg_begin(Register RegNo) const {
522     return use_nodbg_iterator(getRegUseDefListHead(RegNo));
523   }
use_nodbg_end()524   static use_nodbg_iterator use_nodbg_end() {
525     return use_nodbg_iterator(nullptr);
526   }
527 
528   inline iterator_range<use_nodbg_iterator>
use_nodbg_operands(Register Reg)529   use_nodbg_operands(Register Reg) const {
530     return make_range(use_nodbg_begin(Reg), use_nodbg_end());
531   }
532 
533   /// use_instr_nodbg_iterator/use_instr_nodbg_begin/use_instr_nodbg_end - Walk
534   /// all uses of the specified register, stepping by MachineInstr, skipping
535   /// those marked as Debug.
536   using use_instr_nodbg_iterator =
537       defusechain_instr_iterator<true, false, true, /*ByInstr=*/true>;
use_instr_nodbg_begin(Register RegNo)538   use_instr_nodbg_iterator use_instr_nodbg_begin(Register RegNo) const {
539     return use_instr_nodbg_iterator(getRegUseDefListHead(RegNo));
540   }
use_instr_nodbg_end()541   static use_instr_nodbg_iterator use_instr_nodbg_end() {
542     return use_instr_nodbg_iterator(nullptr);
543   }
544 
545   inline iterator_range<use_instr_nodbg_iterator>
use_nodbg_instructions(Register Reg)546   use_nodbg_instructions(Register Reg) const {
547     return make_range(use_instr_nodbg_begin(Reg), use_instr_nodbg_end());
548   }
549 
550   /// use_bundle_nodbg_iterator/use_bundle_nodbg_begin/use_bundle_nodbg_end - Walk
551   /// all uses of the specified register, stepping by bundle, skipping
552   /// those marked as Debug.
553   using use_bundle_nodbg_iterator =
554       defusechain_instr_iterator<true, false, true, /*ByInstr=*/false>;
use_bundle_nodbg_begin(Register RegNo)555   use_bundle_nodbg_iterator use_bundle_nodbg_begin(Register RegNo) const {
556     return use_bundle_nodbg_iterator(getRegUseDefListHead(RegNo));
557   }
use_bundle_nodbg_end()558   static use_bundle_nodbg_iterator use_bundle_nodbg_end() {
559     return use_bundle_nodbg_iterator(nullptr);
560   }
561 
562   inline iterator_range<use_bundle_nodbg_iterator>
use_nodbg_bundles(Register Reg)563   use_nodbg_bundles(Register Reg) const {
564     return make_range(use_bundle_nodbg_begin(Reg), use_bundle_nodbg_end());
565   }
566 
567   /// use_nodbg_empty - Return true if there are no non-Debug instructions
568   /// using the specified register.
use_nodbg_empty(Register RegNo)569   bool use_nodbg_empty(Register RegNo) const {
570     return use_nodbg_begin(RegNo) == use_nodbg_end();
571   }
572 
573   /// hasOneNonDBGUse - Return true if there is exactly one non-Debug
574   /// use of the specified register.
575   LLVM_ABI bool hasOneNonDBGUse(Register RegNo) const;
576 
577   /// hasOneNonDBGUse - Return true if there is exactly one non-Debug
578   /// instruction using the specified register. Said instruction may have
579   /// multiple uses.
580   LLVM_ABI bool hasOneNonDBGUser(Register RegNo) const;
581 
582   /// If the register has a single non-Debug instruction using the specified
583   /// register, returns it; otherwise returns nullptr.
584   LLVM_ABI MachineInstr *getOneNonDBGUser(Register RegNo) const;
585 
586   /// hasAtMostUses - Return true if the given register has at most \p MaxUsers
587   /// non-debug user instructions.
588   LLVM_ABI bool hasAtMostUserInstrs(Register Reg, unsigned MaxUsers) const;
589 
590   /// replaceRegWith - Replace all instances of FromReg with ToReg in the
591   /// machine function.  This is like llvm-level X->replaceAllUsesWith(Y),
592   /// except that it also changes any definitions of the register as well.
593   ///
594   /// Note that it is usually necessary to first constrain ToReg's register
595   /// class and register bank to match the FromReg constraints using one of the
596   /// methods:
597   ///
598   ///   constrainRegClass(ToReg, getRegClass(FromReg))
599   ///   constrainRegAttrs(ToReg, FromReg)
600   ///   RegisterBankInfo::constrainGenericRegister(ToReg,
601   ///       *MRI.getRegClass(FromReg), MRI)
602   ///
603   /// These functions will return a falsy result if the virtual registers have
604   /// incompatible constraints.
605   ///
606   /// Note that if ToReg is a physical register the function will replace and
607   /// apply sub registers to ToReg in order to obtain a final/proper physical
608   /// register.
609   LLVM_ABI void replaceRegWith(Register FromReg, Register ToReg);
610 
611   /// getVRegDef - Return the machine instr that defines the specified virtual
612   /// register or null if none is found.  This assumes that the code is in SSA
613   /// form, so there should only be one definition.
614   LLVM_ABI MachineInstr *getVRegDef(Register Reg) const;
615 
616   /// getUniqueVRegDef - Return the unique machine instr that defines the
617   /// specified virtual register or null if none is found.  If there are
618   /// multiple definitions or no definition, return null.
619   LLVM_ABI MachineInstr *getUniqueVRegDef(Register Reg) const;
620 
621   /// clearKillFlags - Iterate over all the uses of the given register and
622   /// clear the kill flag from the MachineOperand. This function is used by
623   /// optimization passes which extend register lifetimes and need only
624   /// preserve conservative kill flag information.
625   LLVM_ABI void clearKillFlags(Register Reg) const;
626 
627   LLVM_ABI void dumpUses(Register RegNo) const;
628 
629   /// Returns true if PhysReg is unallocatable and constant throughout the
630   /// function. Writing to a constant register has no effect.
631   LLVM_ABI bool isConstantPhysReg(MCRegister PhysReg) const;
632 
633   /// Get an iterator over the pressure sets affected by the given physical or
634   /// virtual register. If RegUnit is physical, it must be a register unit (from
635   /// MCRegUnitIterator).
636   PSetIterator getPressureSets(Register RegUnit) const;
637 
638   //===--------------------------------------------------------------------===//
639   // Virtual Register Info
640   //===--------------------------------------------------------------------===//
641 
642   /// Return the register class of the specified virtual register.
643   /// This shouldn't be used directly unless \p Reg has a register class.
644   /// \see getRegClassOrNull when this might happen.
getRegClass(Register Reg)645   const TargetRegisterClass *getRegClass(Register Reg) const {
646     assert(isa<const TargetRegisterClass *>(VRegInfo[Reg.id()].first) &&
647            "Register class not set, wrong accessor");
648     return cast<const TargetRegisterClass *>(VRegInfo[Reg.id()].first);
649   }
650 
651   /// Return the register class of \p Reg, or null if Reg has not been assigned
652   /// a register class yet.
653   ///
654   /// \note A null register class can only happen when these two
655   /// conditions are met:
656   /// 1. Generic virtual registers are created.
657   /// 2. The machine function has not completely been through the
658   ///    instruction selection process.
659   /// None of this condition is possible without GlobalISel for now.
660   /// In other words, if GlobalISel is not used or if the query happens after
661   /// the select pass, using getRegClass is safe.
getRegClassOrNull(Register Reg)662   const TargetRegisterClass *getRegClassOrNull(Register Reg) const {
663     const RegClassOrRegBank &Val = VRegInfo[Reg].first;
664     return dyn_cast_if_present<const TargetRegisterClass *>(Val);
665   }
666 
667   /// Return the register bank of \p Reg.
668   /// This shouldn't be used directly unless \p Reg has a register bank.
getRegBank(Register Reg)669   const RegisterBank *getRegBank(Register Reg) const {
670     return cast<const RegisterBank *>(VRegInfo[Reg.id()].first);
671   }
672 
673   /// Return the register bank of \p Reg, or null if Reg has not been assigned
674   /// a register bank or has been assigned a register class.
675   /// \note It is possible to get the register bank from the register class via
676   /// RegisterBankInfo::getRegBankFromRegClass.
getRegBankOrNull(Register Reg)677   const RegisterBank *getRegBankOrNull(Register Reg) const {
678     const RegClassOrRegBank &Val = VRegInfo[Reg].first;
679     return dyn_cast_if_present<const RegisterBank *>(Val);
680   }
681 
682   /// Return the register bank or register class of \p Reg.
683   /// \note Before the register bank gets assigned (i.e., before the
684   /// RegBankSelect pass) \p Reg may not have either.
getRegClassOrRegBank(Register Reg)685   const RegClassOrRegBank &getRegClassOrRegBank(Register Reg) const {
686     return VRegInfo[Reg].first;
687   }
688 
689   /// setRegClass - Set the register class of the specified virtual register.
690   LLVM_ABI void setRegClass(Register Reg, const TargetRegisterClass *RC);
691 
692   /// Set the register bank to \p RegBank for \p Reg.
693   LLVM_ABI void setRegBank(Register Reg, const RegisterBank &RegBank);
694 
setRegClassOrRegBank(Register Reg,const RegClassOrRegBank & RCOrRB)695   void setRegClassOrRegBank(Register Reg,
696                             const RegClassOrRegBank &RCOrRB){
697     VRegInfo[Reg].first = RCOrRB;
698   }
699 
700   /// constrainRegClass - Constrain the register class of the specified virtual
701   /// register to be a common subclass of RC and the current register class,
702   /// but only if the new class has at least MinNumRegs registers.  Return the
703   /// new register class, or NULL if no such class exists.
704   /// This should only be used when the constraint is known to be trivial, like
705   /// GR32 -> GR32_NOSP. Beware of increasing register pressure.
706   ///
707   /// \note Assumes that the register has a register class assigned.
708   /// Use RegisterBankInfo::constrainGenericRegister in GlobalISel's
709   /// InstructionSelect pass and constrainRegAttrs in every other pass,
710   /// including non-select passes of GlobalISel, instead.
711   LLVM_ABI const TargetRegisterClass *
712   constrainRegClass(Register Reg, const TargetRegisterClass *RC,
713                     unsigned MinNumRegs = 0);
714 
715   /// Constrain the register class or the register bank of the virtual register
716   /// \p Reg (and low-level type) to be a common subclass or a common bank of
717   /// both registers provided respectively (and a common low-level type). Do
718   /// nothing if any of the attributes (classes, banks, or low-level types) of
719   /// the registers are deemed incompatible, or if the resulting register will
720   /// have a class smaller than before and of size less than \p MinNumRegs.
721   /// Return true if such register attributes exist, false otherwise.
722   ///
723   /// \note Use this method instead of constrainRegClass and
724   /// RegisterBankInfo::constrainGenericRegister everywhere but SelectionDAG
725   /// ISel / FastISel and GlobalISel's InstructionSelect pass respectively.
726   LLVM_ABI bool constrainRegAttrs(Register Reg, Register ConstrainingReg,
727                                   unsigned MinNumRegs = 0);
728 
729   /// recomputeRegClass - Try to find a legal super-class of Reg's register
730   /// class that still satisfies the constraints from the instructions using
731   /// Reg.  Returns true if Reg was upgraded.
732   ///
733   /// This method can be used after constraints have been removed from a
734   /// virtual register, for example after removing instructions or splitting
735   /// the live range.
736   LLVM_ABI bool recomputeRegClass(Register Reg);
737 
738   /// createVirtualRegister - Create and return a new virtual register in the
739   /// function with the specified register class.
740   LLVM_ABI Register createVirtualRegister(const TargetRegisterClass *RegClass,
741                                           StringRef Name = "");
742 
743   /// All attributes(register class or bank and low-level type) a virtual
744   /// register can have.
745   struct VRegAttrs {
746     RegClassOrRegBank RCOrRB;
747     LLT Ty;
748   };
749 
750   /// Returns register class or bank and low level type of \p Reg. Always safe
751   /// to use. Special values are returned when \p Reg does not have some of the
752   /// attributes.
getVRegAttrs(Register Reg)753   VRegAttrs getVRegAttrs(Register Reg) const {
754     return {getRegClassOrRegBank(Reg), getType(Reg)};
755   }
756 
757   /// Create and return a new virtual register in the function with the
758   /// specified register attributes(register class or bank and low level type).
759   LLVM_ABI Register createVirtualRegister(VRegAttrs RegAttr,
760                                           StringRef Name = "");
761 
762   /// Create and return a new virtual register in the function with the same
763   /// attributes as the given register.
764   LLVM_ABI Register cloneVirtualRegister(Register VReg, StringRef Name = "");
765 
766   /// Get the low-level type of \p Reg or LLT{} if Reg is not a generic
767   /// (target independent) virtual register.
getType(Register Reg)768   LLT getType(Register Reg) const {
769     if (Reg.isVirtual() && VRegToType.inBounds(Reg))
770       return VRegToType[Reg];
771     return LLT{};
772   }
773 
774   /// Set the low-level type of \p VReg to \p Ty.
775   LLVM_ABI void setType(Register VReg, LLT Ty);
776 
777   /// Create and return a new generic virtual register with low-level
778   /// type \p Ty.
779   LLVM_ABI Register createGenericVirtualRegister(LLT Ty, StringRef Name = "");
780 
781   /// Remove all types associated to virtual registers (after instruction
782   /// selection and constraining of all generic virtual registers).
783   LLVM_ABI void clearVirtRegTypes();
784 
785   /// Creates a new virtual register that has no register class, register bank
786   /// or size assigned yet. This is only allowed to be used
787   /// temporarily while constructing machine instructions. Most operations are
788   /// undefined on an incomplete register until one of setRegClass(),
789   /// setRegBank() or setSize() has been called on it.
790   LLVM_ABI Register createIncompleteVirtualRegister(StringRef Name = "");
791 
792   /// getNumVirtRegs - Return the number of virtual registers created.
getNumVirtRegs()793   unsigned getNumVirtRegs() const { return VRegInfo.size(); }
794 
795   /// clearVirtRegs - Remove all virtual registers (after physreg assignment).
796   LLVM_ABI void clearVirtRegs();
797 
798   /// setRegAllocationHint - Specify a register allocation hint for the
799   /// specified virtual register. This is typically used by target, and in case
800   /// of an earlier hint it will be overwritten.
setRegAllocationHint(Register VReg,unsigned Type,Register PrefReg)801   void setRegAllocationHint(Register VReg, unsigned Type, Register PrefReg) {
802     assert(VReg.isVirtual());
803     RegAllocHints.grow(Register::index2VirtReg(getNumVirtRegs()));
804     auto &Hint = RegAllocHints[VReg];
805     Hint.first = Type;
806     Hint.second.clear();
807     Hint.second.push_back(PrefReg);
808   }
809 
810   /// addRegAllocationHint - Add a register allocation hint to the hints
811   /// vector for VReg.
addRegAllocationHint(Register VReg,Register PrefReg)812   void addRegAllocationHint(Register VReg, Register PrefReg) {
813     assert(VReg.isVirtual());
814     RegAllocHints.grow(Register::index2VirtReg(getNumVirtRegs()));
815     RegAllocHints[VReg].second.push_back(PrefReg);
816   }
817 
818   /// Specify the preferred (target independent) register allocation hint for
819   /// the specified virtual register.
setSimpleHint(Register VReg,Register PrefReg)820   void setSimpleHint(Register VReg, Register PrefReg) {
821     setRegAllocationHint(VReg, /*Type=*/0, PrefReg);
822   }
823 
clearSimpleHint(Register VReg)824   void clearSimpleHint(Register VReg) {
825     assert (!RegAllocHints[VReg].first &&
826             "Expected to clear a non-target hint!");
827     if (RegAllocHints.inBounds(VReg))
828       RegAllocHints[VReg].second.clear();
829   }
830 
831   /// getRegAllocationHint - Return the register allocation hint for the
832   /// specified virtual register. If there are many hints, this returns the
833   /// one with the greatest weight.
getRegAllocationHint(Register VReg)834   std::pair<unsigned, Register> getRegAllocationHint(Register VReg) const {
835     assert(VReg.isVirtual());
836     if (!RegAllocHints.inBounds(VReg))
837       return {0, Register()};
838     auto &Hint = RegAllocHints[VReg.id()];
839     Register BestHint = (Hint.second.size() ? Hint.second[0] : Register());
840     return {Hint.first, BestHint};
841   }
842 
843   /// getSimpleHint - same as getRegAllocationHint except it will only return
844   /// a target independent hint.
getSimpleHint(Register VReg)845   Register getSimpleHint(Register VReg) const {
846     assert(VReg.isVirtual());
847     std::pair<unsigned, Register> Hint = getRegAllocationHint(VReg);
848     return Hint.first ? Register() : Hint.second;
849   }
850 
851   /// getRegAllocationHints - Return a reference to the vector of all
852   /// register allocation hints for VReg.
853   const std::pair<unsigned, SmallVector<Register, 4>> *
getRegAllocationHints(Register VReg)854   getRegAllocationHints(Register VReg) const {
855     assert(VReg.isVirtual());
856     return RegAllocHints.inBounds(VReg) ? &RegAllocHints[VReg] : nullptr;
857   }
858 
859   /// markUsesInDebugValueAsUndef - Mark every DBG_VALUE referencing the
860   /// specified register as undefined which causes the DBG_VALUE to be
861   /// deleted during LiveDebugVariables analysis.
862   LLVM_ABI void markUsesInDebugValueAsUndef(Register Reg) const;
863 
864   /// updateDbgUsersToReg - Update a collection of debug instructions
865   /// to refer to the designated register.
updateDbgUsersToReg(MCRegister OldReg,MCRegister NewReg,ArrayRef<MachineInstr * > Users)866   void updateDbgUsersToReg(MCRegister OldReg, MCRegister NewReg,
867                            ArrayRef<MachineInstr *> Users) const {
868     // If this operand is a register, check whether it overlaps with OldReg.
869     // If it does, replace with NewReg.
870     auto UpdateOp = [this, &NewReg, &OldReg](MachineOperand &Op) {
871       if (Op.isReg() &&
872           getTargetRegisterInfo()->regsOverlap(Op.getReg(), OldReg))
873         Op.setReg(NewReg);
874     };
875 
876     // Iterate through (possibly several) operands to DBG_VALUEs and update
877     // each. For DBG_PHIs, only one operand will be present.
878     for (MachineInstr *MI : Users) {
879       if (MI->isDebugValue()) {
880         for (auto &Op : MI->debug_operands())
881           UpdateOp(Op);
882         assert(MI->hasDebugOperandForReg(NewReg) &&
883                "Expected debug value to have some overlap with OldReg");
884       } else if (MI->isDebugPHI()) {
885         UpdateOp(MI->getOperand(0));
886       } else {
887         llvm_unreachable("Non-DBG_VALUE, Non-DBG_PHI debug instr updated");
888       }
889     }
890   }
891 
892   /// Return true if the specified register is modified in this function.
893   /// This checks that no defining machine operands exist for the register or
894   /// any of its aliases. Definitions found on functions marked noreturn are
895   /// ignored, to consider them pass 'true' for optional parameter
896   /// SkipNoReturnDef. The register is also considered modified when it is set
897   /// in the UsedPhysRegMask.
898   LLVM_ABI bool isPhysRegModified(MCRegister PhysReg,
899                                   bool SkipNoReturnDef = false) const;
900 
901   /// Return true if the specified register is modified or read in this
902   /// function. This checks that no machine operands exist for the register or
903   /// any of its aliases. If SkipRegMaskTest is false, the register is
904   /// considered used when it is set in the UsedPhysRegMask.
905   LLVM_ABI bool isPhysRegUsed(MCRegister PhysReg,
906                               bool SkipRegMaskTest = false) const;
907 
908   /// addPhysRegsUsedFromRegMask - Mark any registers not in RegMask as used.
909   /// This corresponds to the bit mask attached to register mask operands.
addPhysRegsUsedFromRegMask(const uint32_t * RegMask)910   void addPhysRegsUsedFromRegMask(const uint32_t *RegMask) {
911     UsedPhysRegMask.setBitsNotInMask(RegMask);
912   }
913 
getUsedPhysRegsMask()914   const BitVector &getUsedPhysRegsMask() const { return UsedPhysRegMask; }
915 
916   //===--------------------------------------------------------------------===//
917   // Reserved Register Info
918   //===--------------------------------------------------------------------===//
919   //
920   // The set of reserved registers must be invariant during register
921   // allocation.  For example, the target cannot suddenly decide it needs a
922   // frame pointer when the register allocator has already used the frame
923   // pointer register for something else.
924   //
925   // These methods can be used by target hooks like hasFP() to avoid changing
926   // the reserved register set during register allocation.
927 
928   /// freezeReservedRegs - Called by the register allocator to freeze the set
929   /// of reserved registers before allocation begins.
930   LLVM_ABI void freezeReservedRegs();
931 
932   /// reserveReg -- Mark a register as reserved so checks like isAllocatable
933   /// will not suggest using it. This should not be used during the middle
934   /// of a function walk, or when liveness info is available.
reserveReg(MCRegister PhysReg,const TargetRegisterInfo * TRI)935   void reserveReg(MCRegister PhysReg, const TargetRegisterInfo *TRI) {
936     assert(reservedRegsFrozen() &&
937            "Reserved registers haven't been frozen yet. ");
938     MCRegAliasIterator R(PhysReg, TRI, true);
939 
940     for (; R.isValid(); ++R)
941       ReservedRegs.set((*R).id());
942   }
943 
944   /// reservedRegsFrozen - Returns true after freezeReservedRegs() was called
945   /// to ensure the set of reserved registers stays constant.
reservedRegsFrozen()946   bool reservedRegsFrozen() const {
947     return !ReservedRegs.empty();
948   }
949 
950   /// canReserveReg - Returns true if PhysReg can be used as a reserved
951   /// register.  Any register can be reserved before freezeReservedRegs() is
952   /// called.
canReserveReg(MCRegister PhysReg)953   bool canReserveReg(MCRegister PhysReg) const {
954     return !reservedRegsFrozen() || ReservedRegs.test(PhysReg.id());
955   }
956 
957   /// getReservedRegs - Returns a reference to the frozen set of reserved
958   /// registers. This method should always be preferred to calling
959   /// TRI::getReservedRegs() when possible.
getReservedRegs()960   const BitVector &getReservedRegs() const {
961     assert(reservedRegsFrozen() &&
962            "Reserved registers haven't been frozen yet. "
963            "Use TRI::getReservedRegs().");
964     return ReservedRegs;
965   }
966 
967   /// isReserved - Returns true when PhysReg is a reserved register.
968   ///
969   /// Reserved registers may belong to an allocatable register class, but the
970   /// target has explicitly requested that they are not used.
isReserved(MCRegister PhysReg)971   bool isReserved(MCRegister PhysReg) const {
972     return getReservedRegs().test(PhysReg.id());
973   }
974 
975   /// Returns true when the given register unit is considered reserved.
976   ///
977   /// Register units are considered reserved when for at least one of their
978   /// root registers, the root register and all super registers are reserved.
979   /// This currently iterates the register hierarchy and may be slower than
980   /// expected.
981   LLVM_ABI bool isReservedRegUnit(unsigned Unit) const;
982 
983   /// isAllocatable - Returns true when PhysReg belongs to an allocatable
984   /// register class and it hasn't been reserved.
985   ///
986   /// Allocatable registers may show up in the allocation order of some virtual
987   /// register, so a register allocator needs to track its liveness and
988   /// availability.
isAllocatable(MCRegister PhysReg)989   bool isAllocatable(MCRegister PhysReg) const {
990     return getTargetRegisterInfo()->isInAllocatableClass(PhysReg) &&
991       !isReserved(PhysReg);
992   }
993 
994   //===--------------------------------------------------------------------===//
995   // LiveIn Management
996   //===--------------------------------------------------------------------===//
997 
998   /// addLiveIn - Add the specified register as a live-in.  Note that it
999   /// is an error to add the same register to the same set more than once.
1000   void addLiveIn(MCRegister Reg, Register vreg = Register()) {
1001     LiveIns.push_back(std::make_pair(Reg, vreg));
1002   }
1003 
1004   // Iteration support for the live-ins set.  It's kept in sorted order
1005   // by register number.
1006   using livein_iterator =
1007       std::vector<std::pair<MCRegister,Register>>::const_iterator;
livein_begin()1008   livein_iterator livein_begin() const { return LiveIns.begin(); }
livein_end()1009   livein_iterator livein_end()   const { return LiveIns.end(); }
livein_empty()1010   bool            livein_empty() const { return LiveIns.empty(); }
1011 
liveins()1012   ArrayRef<std::pair<MCRegister, Register>> liveins() const {
1013     return LiveIns;
1014   }
1015 
1016   LLVM_ABI bool isLiveIn(Register Reg) const;
1017 
1018   /// getLiveInPhysReg - If VReg is a live-in virtual register, return the
1019   /// corresponding live-in physical register.
1020   LLVM_ABI MCRegister getLiveInPhysReg(Register VReg) const;
1021 
1022   /// getLiveInVirtReg - If PReg is a live-in physical register, return the
1023   /// corresponding live-in virtual register.
1024   LLVM_ABI Register getLiveInVirtReg(MCRegister PReg) const;
1025 
1026   /// EmitLiveInCopies - Emit copies to initialize livein virtual registers
1027   /// into the given entry block.
1028   LLVM_ABI void EmitLiveInCopies(MachineBasicBlock *EntryMBB,
1029                                  const TargetRegisterInfo &TRI,
1030                                  const TargetInstrInfo &TII);
1031 
1032   /// Returns a mask covering all bits that can appear in lane masks of
1033   /// subregisters of the virtual register @p Reg.
1034   LLVM_ABI LaneBitmask getMaxLaneMaskForVReg(Register Reg) const;
1035 
1036   /// defusechain_iterator - This class provides iterator support for machine
1037   /// operands in the function that use or define a specific register.  If
1038   /// ReturnUses is true it returns uses of registers, if ReturnDefs is true it
1039   /// returns defs.  If neither are true then you are silly and it always
1040   /// returns end().  If SkipDebug is true it skips uses marked Debug
1041   /// when incrementing.
1042   template <bool ReturnUses, bool ReturnDefs, bool SkipDebug, bool ByOperand,
1043             bool ByInstr>
1044   class defusechain_iterator {
1045     friend class MachineRegisterInfo;
1046     static_assert(!ByOperand || !ByInstr,
1047                   "ByOperand and ByInstr are mutually exclusive");
1048 
1049   public:
1050     using iterator_category = std::forward_iterator_tag;
1051     using value_type = MachineOperand;
1052     using difference_type = std::ptrdiff_t;
1053     using pointer = value_type *;
1054     using reference = value_type &;
1055 
1056   private:
1057     MachineOperand *Op = nullptr;
1058 
defusechain_iterator(MachineOperand * op)1059     explicit defusechain_iterator(MachineOperand *op) : Op(op) {
1060       // If the first node isn't one we're interested in, advance to one that
1061       // we are interested in.
1062       if (op) {
1063         if ((!ReturnUses && op->isUse()) ||
1064             (!ReturnDefs && op->isDef()) ||
1065             (SkipDebug && op->isDebug()))
1066           advance();
1067       }
1068     }
1069 
advance()1070     void advance() {
1071       assert(Op && "Cannot increment end iterator!");
1072       Op = getNextOperandForReg(Op);
1073 
1074       // All defs come before the uses, so stop def_iterator early.
1075       if (!ReturnUses) {
1076         if (Op) {
1077           if (Op->isUse())
1078             Op = nullptr;
1079           else
1080             assert(!Op->isDebug() && "Can't have debug defs");
1081         }
1082       } else {
1083         // If this is an operand we don't care about, skip it.
1084         while (Op && ((!ReturnDefs && Op->isDef()) ||
1085                       (SkipDebug && Op->isDebug())))
1086           Op = getNextOperandForReg(Op);
1087       }
1088     }
1089 
1090   public:
1091     defusechain_iterator() = default;
1092 
1093     bool operator==(const defusechain_iterator &x) const {
1094       return Op == x.Op;
1095     }
1096     bool operator!=(const defusechain_iterator &x) const {
1097       return !operator==(x);
1098     }
1099 
1100     // Iterator traversal: forward iteration only
1101     defusechain_iterator &operator++() {          // Preincrement
1102       assert(Op && "Cannot increment end iterator!");
1103       if (ByOperand)
1104         advance();
1105       else if (ByInstr) {
1106         MachineInstr *P = Op->getParent();
1107         do {
1108           advance();
1109         } while (Op && Op->getParent() == P);
1110       } else {
1111         MachineBasicBlock::instr_iterator P =
1112             getBundleStart(Op->getParent()->getIterator());
1113         do {
1114           advance();
1115         } while (Op && getBundleStart(Op->getParent()->getIterator()) == P);
1116       }
1117 
1118       return *this;
1119     }
1120     defusechain_iterator operator++(int) {        // Postincrement
1121       defusechain_iterator tmp = *this; ++*this; return tmp;
1122     }
1123 
1124     /// getOperandNo - Return the operand # of this MachineOperand in its
1125     /// MachineInstr.
getOperandNo()1126     unsigned getOperandNo() const {
1127       assert(Op && "Cannot dereference end iterator!");
1128       return Op - &Op->getParent()->getOperand(0);
1129     }
1130 
1131     // Retrieve a reference to the current operand.
1132     MachineOperand &operator*() const {
1133       assert(Op && "Cannot dereference end iterator!");
1134       return *Op;
1135     }
1136 
1137     MachineOperand *operator->() const {
1138       assert(Op && "Cannot dereference end iterator!");
1139       return Op;
1140     }
1141   };
1142 
1143   /// defusechain_iterator - This class provides iterator support for machine
1144   /// operands in the function that use or define a specific register.  If
1145   /// ReturnUses is true it returns uses of registers, if ReturnDefs is true it
1146   /// returns defs.  If neither are true then you are silly and it always
1147   /// returns end().  If SkipDebug is true it skips uses marked Debug
1148   /// when incrementing.
1149   template <bool ReturnUses, bool ReturnDefs, bool SkipDebug, bool ByInstr>
1150   class defusechain_instr_iterator {
1151     friend class MachineRegisterInfo;
1152 
1153   public:
1154     using iterator_category = std::forward_iterator_tag;
1155     using value_type = MachineInstr;
1156     using difference_type = std::ptrdiff_t;
1157     using pointer = value_type *;
1158     using reference = value_type &;
1159 
1160   private:
1161     MachineOperand *Op = nullptr;
1162 
defusechain_instr_iterator(MachineOperand * op)1163     explicit defusechain_instr_iterator(MachineOperand *op) : Op(op) {
1164       // If the first node isn't one we're interested in, advance to one that
1165       // we are interested in.
1166       if (op) {
1167         if ((!ReturnUses && op->isUse()) ||
1168             (!ReturnDefs && op->isDef()) ||
1169             (SkipDebug && op->isDebug()))
1170           advance();
1171       }
1172     }
1173 
advance()1174     void advance() {
1175       assert(Op && "Cannot increment end iterator!");
1176       Op = getNextOperandForReg(Op);
1177 
1178       // All defs come before the uses, so stop def_iterator early.
1179       if (!ReturnUses) {
1180         if (Op) {
1181           if (Op->isUse())
1182             Op = nullptr;
1183           else
1184             assert(!Op->isDebug() && "Can't have debug defs");
1185         }
1186       } else {
1187         // If this is an operand we don't care about, skip it.
1188         while (Op && ((!ReturnDefs && Op->isDef()) ||
1189                       (SkipDebug && Op->isDebug())))
1190           Op = getNextOperandForReg(Op);
1191       }
1192     }
1193 
1194   public:
1195     defusechain_instr_iterator() = default;
1196 
1197     bool operator==(const defusechain_instr_iterator &x) const {
1198       return Op == x.Op;
1199     }
1200     bool operator!=(const defusechain_instr_iterator &x) const {
1201       return !operator==(x);
1202     }
1203 
1204     // Iterator traversal: forward iteration only
1205     defusechain_instr_iterator &operator++() {          // Preincrement
1206       assert(Op && "Cannot increment end iterator!");
1207       if (ByInstr) {
1208         MachineInstr *P = Op->getParent();
1209         do {
1210           advance();
1211         } while (Op && Op->getParent() == P);
1212       } else {
1213         MachineBasicBlock::instr_iterator P =
1214             getBundleStart(Op->getParent()->getIterator());
1215         do {
1216           advance();
1217         } while (Op && getBundleStart(Op->getParent()->getIterator()) == P);
1218       }
1219 
1220       return *this;
1221     }
1222     defusechain_instr_iterator operator++(int) {        // Postincrement
1223       defusechain_instr_iterator tmp = *this; ++*this; return tmp;
1224     }
1225 
1226     // Retrieve a reference to the current operand.
1227     MachineInstr &operator*() const {
1228       assert(Op && "Cannot dereference end iterator!");
1229       if (!ByInstr)
1230         return *getBundleStart(Op->getParent()->getIterator());
1231       return *Op->getParent();
1232     }
1233 
1234     MachineInstr *operator->() const { return &operator*(); }
1235   };
1236 };
1237 
1238 /// Iterate over the pressure sets affected by the given physical or virtual
1239 /// register. If Reg is physical, it must be a register unit (from
1240 /// MCRegUnitIterator).
1241 class PSetIterator {
1242   const int *PSet = nullptr;
1243   unsigned Weight = 0;
1244 
1245 public:
1246   PSetIterator() = default;
1247 
PSetIterator(Register RegUnit,const MachineRegisterInfo * MRI)1248   PSetIterator(Register RegUnit, const MachineRegisterInfo *MRI) {
1249     const TargetRegisterInfo *TRI = MRI->getTargetRegisterInfo();
1250     if (RegUnit.isVirtual()) {
1251       const TargetRegisterClass *RC = MRI->getRegClass(RegUnit);
1252       PSet = TRI->getRegClassPressureSets(RC);
1253       Weight = TRI->getRegClassWeight(RC).RegWeight;
1254     } else {
1255       PSet = TRI->getRegUnitPressureSets(RegUnit);
1256       Weight = TRI->getRegUnitWeight(RegUnit);
1257     }
1258     if (*PSet == -1)
1259       PSet = nullptr;
1260   }
1261 
isValid()1262   bool isValid() const { return PSet; }
1263 
getWeight()1264   unsigned getWeight() const { return Weight; }
1265 
1266   unsigned operator*() const { return *PSet; }
1267 
1268   void operator++() {
1269     assert(isValid() && "Invalid PSetIterator.");
1270     ++PSet;
1271     if (*PSet == -1)
1272       PSet = nullptr;
1273   }
1274 };
1275 
1276 inline PSetIterator
getPressureSets(Register RegUnit)1277 MachineRegisterInfo::getPressureSets(Register RegUnit) const {
1278   return PSetIterator(RegUnit, this);
1279 }
1280 
1281 } // end namespace llvm
1282 
1283 #endif // LLVM_CODEGEN_MACHINEREGISTERINFO_H
1284