1 //==- TargetRegisterInfo.cpp - Target Register Information Implementation --==//
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 implements the TargetRegisterInfo interface.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "llvm/CodeGen/TargetRegisterInfo.h"
14 #include "llvm/ADT/ArrayRef.h"
15 #include "llvm/ADT/BitVector.h"
16 #include "llvm/ADT/STLExtras.h"
17 #include "llvm/ADT/SmallSet.h"
18 #include "llvm/ADT/StringExtras.h"
19 #include "llvm/CodeGen/MachineFrameInfo.h"
20 #include "llvm/CodeGen/MachineFunction.h"
21 #include "llvm/CodeGen/MachineRegisterInfo.h"
22 #include "llvm/CodeGen/LiveInterval.h"
23 #include "llvm/CodeGen/TargetFrameLowering.h"
24 #include "llvm/CodeGen/TargetInstrInfo.h"
25 #include "llvm/CodeGen/TargetSubtargetInfo.h"
26 #include "llvm/CodeGen/VirtRegMap.h"
27 #include "llvm/Config/llvm-config.h"
28 #include "llvm/IR/Attributes.h"
29 #include "llvm/IR/Function.h"
30 #include "llvm/MC/MCRegisterInfo.h"
31 #include "llvm/Support/CommandLine.h"
32 #include "llvm/Support/Compiler.h"
33 #include "llvm/Support/Debug.h"
34 #include "llvm/Support/MachineValueType.h"
35 #include "llvm/Support/MathExtras.h"
36 #include "llvm/Support/Printable.h"
37 #include "llvm/Support/raw_ostream.h"
38 #include <cassert>
39 #include <utility>
40 
41 #define DEBUG_TYPE "target-reg-info"
42 
43 using namespace llvm;
44 
45 static cl::opt<unsigned>
46     HugeSizeForSplit("huge-size-for-split", cl::Hidden,
47                      cl::desc("A threshold of live range size which may cause "
48                               "high compile time cost in global splitting."),
49                      cl::init(5000));
50 
TargetRegisterInfo(const TargetRegisterInfoDesc * ID,regclass_iterator RCB,regclass_iterator RCE,const char * const * SRINames,const LaneBitmask * SRILaneMasks,LaneBitmask SRICoveringLanes,const RegClassInfo * const RCIs,unsigned Mode)51 TargetRegisterInfo::TargetRegisterInfo(const TargetRegisterInfoDesc *ID,
52                              regclass_iterator RCB, regclass_iterator RCE,
53                              const char *const *SRINames,
54                              const LaneBitmask *SRILaneMasks,
55                              LaneBitmask SRICoveringLanes,
56                              const RegClassInfo *const RCIs,
57                              unsigned Mode)
58   : InfoDesc(ID), SubRegIndexNames(SRINames),
59     SubRegIndexLaneMasks(SRILaneMasks),
60     RegClassBegin(RCB), RegClassEnd(RCE),
61     CoveringLanes(SRICoveringLanes),
62     RCInfos(RCIs), HwMode(Mode) {
63 }
64 
65 TargetRegisterInfo::~TargetRegisterInfo() = default;
66 
shouldRegionSplitForVirtReg(const MachineFunction & MF,const LiveInterval & VirtReg) const67 bool TargetRegisterInfo::shouldRegionSplitForVirtReg(
68     const MachineFunction &MF, const LiveInterval &VirtReg) const {
69   const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo();
70   const MachineRegisterInfo &MRI = MF.getRegInfo();
71   MachineInstr *MI = MRI.getUniqueVRegDef(VirtReg.reg());
72   if (MI && TII->isTriviallyReMaterializable(*MI) &&
73       VirtReg.size() > HugeSizeForSplit)
74     return false;
75   return true;
76 }
77 
markSuperRegs(BitVector & RegisterSet,MCRegister Reg) const78 void TargetRegisterInfo::markSuperRegs(BitVector &RegisterSet,
79                                        MCRegister Reg) const {
80   for (MCSuperRegIterator AI(Reg, this, true); AI.isValid(); ++AI)
81     RegisterSet.set(*AI);
82 }
83 
checkAllSuperRegsMarked(const BitVector & RegisterSet,ArrayRef<MCPhysReg> Exceptions) const84 bool TargetRegisterInfo::checkAllSuperRegsMarked(const BitVector &RegisterSet,
85     ArrayRef<MCPhysReg> Exceptions) const {
86   // Check that all super registers of reserved regs are reserved as well.
87   BitVector Checked(getNumRegs());
88   for (unsigned Reg : RegisterSet.set_bits()) {
89     if (Checked[Reg])
90       continue;
91     for (MCSuperRegIterator SR(Reg, this); SR.isValid(); ++SR) {
92       if (!RegisterSet[*SR] && !is_contained(Exceptions, Reg)) {
93         dbgs() << "Error: Super register " << printReg(*SR, this)
94                << " of reserved register " << printReg(Reg, this)
95                << " is not reserved.\n";
96         return false;
97       }
98 
99       // We transitively check superregs. So we can remember this for later
100       // to avoid compiletime explosion in deep register hierarchies.
101       Checked.set(*SR);
102     }
103   }
104   return true;
105 }
106 
107 namespace llvm {
108 
printReg(Register Reg,const TargetRegisterInfo * TRI,unsigned SubIdx,const MachineRegisterInfo * MRI)109 Printable printReg(Register Reg, const TargetRegisterInfo *TRI,
110                    unsigned SubIdx, const MachineRegisterInfo *MRI) {
111   return Printable([Reg, TRI, SubIdx, MRI](raw_ostream &OS) {
112     if (!Reg)
113       OS << "$noreg";
114     else if (Register::isStackSlot(Reg))
115       OS << "SS#" << Register::stackSlot2Index(Reg);
116     else if (Register::isVirtualRegister(Reg)) {
117       StringRef Name = MRI ? MRI->getVRegName(Reg) : "";
118       if (Name != "") {
119         OS << '%' << Name;
120       } else {
121         OS << '%' << Register::virtReg2Index(Reg);
122       }
123     } else if (!TRI)
124       OS << '$' << "physreg" << Reg;
125     else if (Reg < TRI->getNumRegs()) {
126       OS << '$';
127       printLowerCase(TRI->getName(Reg), OS);
128     } else
129       llvm_unreachable("Register kind is unsupported.");
130 
131     if (SubIdx) {
132       if (TRI)
133         OS << ':' << TRI->getSubRegIndexName(SubIdx);
134       else
135         OS << ":sub(" << SubIdx << ')';
136     }
137   });
138 }
139 
printRegUnit(unsigned Unit,const TargetRegisterInfo * TRI)140 Printable printRegUnit(unsigned Unit, const TargetRegisterInfo *TRI) {
141   return Printable([Unit, TRI](raw_ostream &OS) {
142     // Generic printout when TRI is missing.
143     if (!TRI) {
144       OS << "Unit~" << Unit;
145       return;
146     }
147 
148     // Check for invalid register units.
149     if (Unit >= TRI->getNumRegUnits()) {
150       OS << "BadUnit~" << Unit;
151       return;
152     }
153 
154     // Normal units have at least one root.
155     MCRegUnitRootIterator Roots(Unit, TRI);
156     assert(Roots.isValid() && "Unit has no roots.");
157     OS << TRI->getName(*Roots);
158     for (++Roots; Roots.isValid(); ++Roots)
159       OS << '~' << TRI->getName(*Roots);
160   });
161 }
162 
printVRegOrUnit(unsigned Unit,const TargetRegisterInfo * TRI)163 Printable printVRegOrUnit(unsigned Unit, const TargetRegisterInfo *TRI) {
164   return Printable([Unit, TRI](raw_ostream &OS) {
165     if (Register::isVirtualRegister(Unit)) {
166       OS << '%' << Register::virtReg2Index(Unit);
167     } else {
168       OS << printRegUnit(Unit, TRI);
169     }
170   });
171 }
172 
printRegClassOrBank(Register Reg,const MachineRegisterInfo & RegInfo,const TargetRegisterInfo * TRI)173 Printable printRegClassOrBank(Register Reg, const MachineRegisterInfo &RegInfo,
174                               const TargetRegisterInfo *TRI) {
175   return Printable([Reg, &RegInfo, TRI](raw_ostream &OS) {
176     if (RegInfo.getRegClassOrNull(Reg))
177       OS << StringRef(TRI->getRegClassName(RegInfo.getRegClass(Reg))).lower();
178     else if (RegInfo.getRegBankOrNull(Reg))
179       OS << StringRef(RegInfo.getRegBankOrNull(Reg)->getName()).lower();
180     else {
181       OS << "_";
182       assert((RegInfo.def_empty(Reg) || RegInfo.getType(Reg).isValid()) &&
183              "Generic registers must have a valid type");
184     }
185   });
186 }
187 
188 } // end namespace llvm
189 
190 /// getAllocatableClass - Return the maximal subclass of the given register
191 /// class that is alloctable, or NULL.
192 const TargetRegisterClass *
getAllocatableClass(const TargetRegisterClass * RC) const193 TargetRegisterInfo::getAllocatableClass(const TargetRegisterClass *RC) const {
194   if (!RC || RC->isAllocatable())
195     return RC;
196 
197   for (BitMaskClassIterator It(RC->getSubClassMask(), *this); It.isValid();
198        ++It) {
199     const TargetRegisterClass *SubRC = getRegClass(It.getID());
200     if (SubRC->isAllocatable())
201       return SubRC;
202   }
203   return nullptr;
204 }
205 
206 /// getMinimalPhysRegClass - Returns the Register Class of a physical
207 /// register of the given type, picking the most sub register class of
208 /// the right type that contains this physreg.
209 const TargetRegisterClass *
getMinimalPhysRegClass(MCRegister reg,MVT VT) const210 TargetRegisterInfo::getMinimalPhysRegClass(MCRegister reg, MVT VT) const {
211   assert(Register::isPhysicalRegister(reg) &&
212          "reg must be a physical register");
213 
214   // Pick the most sub register class of the right type that contains
215   // this physreg.
216   const TargetRegisterClass* BestRC = nullptr;
217   for (const TargetRegisterClass* RC : regclasses()) {
218     if ((VT == MVT::Other || isTypeLegalForClass(*RC, VT)) &&
219         RC->contains(reg) && (!BestRC || BestRC->hasSubClass(RC)))
220       BestRC = RC;
221   }
222 
223   assert(BestRC && "Couldn't find the register class");
224   return BestRC;
225 }
226 
227 /// getAllocatableSetForRC - Toggle the bits that represent allocatable
228 /// registers for the specific register class.
getAllocatableSetForRC(const MachineFunction & MF,const TargetRegisterClass * RC,BitVector & R)229 static void getAllocatableSetForRC(const MachineFunction &MF,
230                                    const TargetRegisterClass *RC, BitVector &R){
231   assert(RC->isAllocatable() && "invalid for nonallocatable sets");
232   ArrayRef<MCPhysReg> Order = RC->getRawAllocationOrder(MF);
233   for (unsigned i = 0; i != Order.size(); ++i)
234     R.set(Order[i]);
235 }
236 
getAllocatableSet(const MachineFunction & MF,const TargetRegisterClass * RC) const237 BitVector TargetRegisterInfo::getAllocatableSet(const MachineFunction &MF,
238                                           const TargetRegisterClass *RC) const {
239   BitVector Allocatable(getNumRegs());
240   if (RC) {
241     // A register class with no allocatable subclass returns an empty set.
242     const TargetRegisterClass *SubClass = getAllocatableClass(RC);
243     if (SubClass)
244       getAllocatableSetForRC(MF, SubClass, Allocatable);
245   } else {
246     for (const TargetRegisterClass *C : regclasses())
247       if (C->isAllocatable())
248         getAllocatableSetForRC(MF, C, Allocatable);
249   }
250 
251   // Mask out the reserved registers
252   BitVector Reserved = getReservedRegs(MF);
253   Allocatable &= Reserved.flip();
254 
255   return Allocatable;
256 }
257 
258 static inline
firstCommonClass(const uint32_t * A,const uint32_t * B,const TargetRegisterInfo * TRI)259 const TargetRegisterClass *firstCommonClass(const uint32_t *A,
260                                             const uint32_t *B,
261                                             const TargetRegisterInfo *TRI) {
262   for (unsigned I = 0, E = TRI->getNumRegClasses(); I < E; I += 32)
263     if (unsigned Common = *A++ & *B++)
264       return TRI->getRegClass(I + countTrailingZeros(Common));
265   return nullptr;
266 }
267 
268 const TargetRegisterClass *
getCommonSubClass(const TargetRegisterClass * A,const TargetRegisterClass * B) const269 TargetRegisterInfo::getCommonSubClass(const TargetRegisterClass *A,
270                                       const TargetRegisterClass *B) const {
271   // First take care of the trivial cases.
272   if (A == B)
273     return A;
274   if (!A || !B)
275     return nullptr;
276 
277   // Register classes are ordered topologically, so the largest common
278   // sub-class it the common sub-class with the smallest ID.
279   return firstCommonClass(A->getSubClassMask(), B->getSubClassMask(), this);
280 }
281 
282 const TargetRegisterClass *
getMatchingSuperRegClass(const TargetRegisterClass * A,const TargetRegisterClass * B,unsigned Idx) const283 TargetRegisterInfo::getMatchingSuperRegClass(const TargetRegisterClass *A,
284                                              const TargetRegisterClass *B,
285                                              unsigned Idx) const {
286   assert(A && B && "Missing register class");
287   assert(Idx && "Bad sub-register index");
288 
289   // Find Idx in the list of super-register indices.
290   for (SuperRegClassIterator RCI(B, this); RCI.isValid(); ++RCI)
291     if (RCI.getSubReg() == Idx)
292       // The bit mask contains all register classes that are projected into B
293       // by Idx. Find a class that is also a sub-class of A.
294       return firstCommonClass(RCI.getMask(), A->getSubClassMask(), this);
295   return nullptr;
296 }
297 
298 const TargetRegisterClass *TargetRegisterInfo::
getCommonSuperRegClass(const TargetRegisterClass * RCA,unsigned SubA,const TargetRegisterClass * RCB,unsigned SubB,unsigned & PreA,unsigned & PreB) const299 getCommonSuperRegClass(const TargetRegisterClass *RCA, unsigned SubA,
300                        const TargetRegisterClass *RCB, unsigned SubB,
301                        unsigned &PreA, unsigned &PreB) const {
302   assert(RCA && SubA && RCB && SubB && "Invalid arguments");
303 
304   // Search all pairs of sub-register indices that project into RCA and RCB
305   // respectively. This is quadratic, but usually the sets are very small. On
306   // most targets like X86, there will only be a single sub-register index
307   // (e.g., sub_16bit projecting into GR16).
308   //
309   // The worst case is a register class like DPR on ARM.
310   // We have indices dsub_0..dsub_7 projecting into that class.
311   //
312   // It is very common that one register class is a sub-register of the other.
313   // Arrange for RCA to be the larger register so the answer will be found in
314   // the first iteration. This makes the search linear for the most common
315   // case.
316   const TargetRegisterClass *BestRC = nullptr;
317   unsigned *BestPreA = &PreA;
318   unsigned *BestPreB = &PreB;
319   if (getRegSizeInBits(*RCA) < getRegSizeInBits(*RCB)) {
320     std::swap(RCA, RCB);
321     std::swap(SubA, SubB);
322     std::swap(BestPreA, BestPreB);
323   }
324 
325   // Also terminate the search one we have found a register class as small as
326   // RCA.
327   unsigned MinSize = getRegSizeInBits(*RCA);
328 
329   for (SuperRegClassIterator IA(RCA, this, true); IA.isValid(); ++IA) {
330     unsigned FinalA = composeSubRegIndices(IA.getSubReg(), SubA);
331     for (SuperRegClassIterator IB(RCB, this, true); IB.isValid(); ++IB) {
332       // Check if a common super-register class exists for this index pair.
333       const TargetRegisterClass *RC =
334         firstCommonClass(IA.getMask(), IB.getMask(), this);
335       if (!RC || getRegSizeInBits(*RC) < MinSize)
336         continue;
337 
338       // The indexes must compose identically: PreA+SubA == PreB+SubB.
339       unsigned FinalB = composeSubRegIndices(IB.getSubReg(), SubB);
340       if (FinalA != FinalB)
341         continue;
342 
343       // Is RC a better candidate than BestRC?
344       if (BestRC && getRegSizeInBits(*RC) >= getRegSizeInBits(*BestRC))
345         continue;
346 
347       // Yes, RC is the smallest super-register seen so far.
348       BestRC = RC;
349       *BestPreA = IA.getSubReg();
350       *BestPreB = IB.getSubReg();
351 
352       // Bail early if we reached MinSize. We won't find a better candidate.
353       if (getRegSizeInBits(*BestRC) == MinSize)
354         return BestRC;
355     }
356   }
357   return BestRC;
358 }
359 
360 /// Check if the registers defined by the pair (RegisterClass, SubReg)
361 /// share the same register file.
shareSameRegisterFile(const TargetRegisterInfo & TRI,const TargetRegisterClass * DefRC,unsigned DefSubReg,const TargetRegisterClass * SrcRC,unsigned SrcSubReg)362 static bool shareSameRegisterFile(const TargetRegisterInfo &TRI,
363                                   const TargetRegisterClass *DefRC,
364                                   unsigned DefSubReg,
365                                   const TargetRegisterClass *SrcRC,
366                                   unsigned SrcSubReg) {
367   // Same register class.
368   if (DefRC == SrcRC)
369     return true;
370 
371   // Both operands are sub registers. Check if they share a register class.
372   unsigned SrcIdx, DefIdx;
373   if (SrcSubReg && DefSubReg) {
374     return TRI.getCommonSuperRegClass(SrcRC, SrcSubReg, DefRC, DefSubReg,
375                                       SrcIdx, DefIdx) != nullptr;
376   }
377 
378   // At most one of the register is a sub register, make it Src to avoid
379   // duplicating the test.
380   if (!SrcSubReg) {
381     std::swap(DefSubReg, SrcSubReg);
382     std::swap(DefRC, SrcRC);
383   }
384 
385   // One of the register is a sub register, check if we can get a superclass.
386   if (SrcSubReg)
387     return TRI.getMatchingSuperRegClass(SrcRC, DefRC, SrcSubReg) != nullptr;
388 
389   // Plain copy.
390   return TRI.getCommonSubClass(DefRC, SrcRC) != nullptr;
391 }
392 
shouldRewriteCopySrc(const TargetRegisterClass * DefRC,unsigned DefSubReg,const TargetRegisterClass * SrcRC,unsigned SrcSubReg) const393 bool TargetRegisterInfo::shouldRewriteCopySrc(const TargetRegisterClass *DefRC,
394                                               unsigned DefSubReg,
395                                               const TargetRegisterClass *SrcRC,
396                                               unsigned SrcSubReg) const {
397   // If this source does not incur a cross register bank copy, use it.
398   return shareSameRegisterFile(*this, DefRC, DefSubReg, SrcRC, SrcSubReg);
399 }
400 
401 // Compute target-independent register allocator hints to help eliminate copies.
getRegAllocationHints(Register VirtReg,ArrayRef<MCPhysReg> Order,SmallVectorImpl<MCPhysReg> & Hints,const MachineFunction & MF,const VirtRegMap * VRM,const LiveRegMatrix * Matrix) const402 bool TargetRegisterInfo::getRegAllocationHints(
403     Register VirtReg, ArrayRef<MCPhysReg> Order,
404     SmallVectorImpl<MCPhysReg> &Hints, const MachineFunction &MF,
405     const VirtRegMap *VRM, const LiveRegMatrix *Matrix) const {
406   const MachineRegisterInfo &MRI = MF.getRegInfo();
407   const std::pair<Register, SmallVector<Register, 4>> &Hints_MRI =
408     MRI.getRegAllocationHints(VirtReg);
409 
410   SmallSet<Register, 32> HintedRegs;
411   // First hint may be a target hint.
412   bool Skip = (Hints_MRI.first != 0);
413   for (auto Reg : Hints_MRI.second) {
414     if (Skip) {
415       Skip = false;
416       continue;
417     }
418 
419     // Target-independent hints are either a physical or a virtual register.
420     Register Phys = Reg;
421     if (VRM && Phys.isVirtual())
422       Phys = VRM->getPhys(Phys);
423 
424     // Don't add the same reg twice (Hints_MRI may contain multiple virtual
425     // registers allocated to the same physreg).
426     if (!HintedRegs.insert(Phys).second)
427       continue;
428     // Check that Phys is a valid hint in VirtReg's register class.
429     if (!Phys.isPhysical())
430       continue;
431     if (MRI.isReserved(Phys))
432       continue;
433     // Check that Phys is in the allocation order. We shouldn't heed hints
434     // from VirtReg's register class if they aren't in the allocation order. The
435     // target probably has a reason for removing the register.
436     if (!is_contained(Order, Phys))
437       continue;
438 
439     // All clear, tell the register allocator to prefer this register.
440     Hints.push_back(Phys);
441   }
442   return false;
443 }
444 
isCalleeSavedPhysReg(MCRegister PhysReg,const MachineFunction & MF) const445 bool TargetRegisterInfo::isCalleeSavedPhysReg(
446     MCRegister PhysReg, const MachineFunction &MF) const {
447   if (PhysReg == 0)
448     return false;
449   const uint32_t *callerPreservedRegs =
450       getCallPreservedMask(MF, MF.getFunction().getCallingConv());
451   if (callerPreservedRegs) {
452     assert(Register::isPhysicalRegister(PhysReg) &&
453            "Expected physical register");
454     return (callerPreservedRegs[PhysReg / 32] >> PhysReg % 32) & 1;
455   }
456   return false;
457 }
458 
canRealignStack(const MachineFunction & MF) const459 bool TargetRegisterInfo::canRealignStack(const MachineFunction &MF) const {
460   return !MF.getFunction().hasFnAttribute("no-realign-stack");
461 }
462 
needsStackRealignment(const MachineFunction & MF) const463 bool TargetRegisterInfo::needsStackRealignment(
464     const MachineFunction &MF) const {
465   const MachineFrameInfo &MFI = MF.getFrameInfo();
466   const TargetFrameLowering *TFI = MF.getSubtarget().getFrameLowering();
467   const Function &F = MF.getFunction();
468   Align StackAlign = TFI->getStackAlign();
469   bool requiresRealignment = ((MFI.getMaxAlign() > StackAlign) ||
470                               F.hasFnAttribute(Attribute::StackAlignment));
471   if (F.hasFnAttribute("stackrealign") || requiresRealignment) {
472     if (canRealignStack(MF))
473       return true;
474     LLVM_DEBUG(dbgs() << "Can't realign function's stack: " << F.getName()
475                       << "\n");
476   }
477   return false;
478 }
479 
regmaskSubsetEqual(const uint32_t * mask0,const uint32_t * mask1) const480 bool TargetRegisterInfo::regmaskSubsetEqual(const uint32_t *mask0,
481                                             const uint32_t *mask1) const {
482   unsigned N = (getNumRegs()+31) / 32;
483   for (unsigned I = 0; I < N; ++I)
484     if ((mask0[I] & mask1[I]) != mask0[I])
485       return false;
486   return true;
487 }
488 
489 unsigned
getRegSizeInBits(Register Reg,const MachineRegisterInfo & MRI) const490 TargetRegisterInfo::getRegSizeInBits(Register Reg,
491                                      const MachineRegisterInfo &MRI) const {
492   const TargetRegisterClass *RC{};
493   if (Reg.isPhysical()) {
494     // The size is not directly available for physical registers.
495     // Instead, we need to access a register class that contains Reg and
496     // get the size of that register class.
497     RC = getMinimalPhysRegClass(Reg);
498   } else {
499     LLT Ty = MRI.getType(Reg);
500     unsigned RegSize = Ty.isValid() ? Ty.getSizeInBits() : 0;
501     // If Reg is not a generic register, query the register class to
502     // get its size.
503     if (RegSize)
504       return RegSize;
505     // Since Reg is not a generic register, it must have a register class.
506     RC = MRI.getRegClass(Reg);
507   }
508   assert(RC && "Unable to deduce the register class");
509   return getRegSizeInBits(*RC);
510 }
511 
512 Register
lookThruCopyLike(Register SrcReg,const MachineRegisterInfo * MRI) const513 TargetRegisterInfo::lookThruCopyLike(Register SrcReg,
514                                      const MachineRegisterInfo *MRI) const {
515   while (true) {
516     const MachineInstr *MI = MRI->getVRegDef(SrcReg);
517     if (!MI->isCopyLike())
518       return SrcReg;
519 
520     Register CopySrcReg;
521     if (MI->isCopy())
522       CopySrcReg = MI->getOperand(1).getReg();
523     else {
524       assert(MI->isSubregToReg() && "Bad opcode for lookThruCopyLike");
525       CopySrcReg = MI->getOperand(2).getReg();
526     }
527 
528     if (!CopySrcReg.isVirtual())
529       return CopySrcReg;
530 
531     SrcReg = CopySrcReg;
532   }
533 }
534 
535 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
536 LLVM_DUMP_METHOD
dumpReg(Register Reg,unsigned SubRegIndex,const TargetRegisterInfo * TRI)537 void TargetRegisterInfo::dumpReg(Register Reg, unsigned SubRegIndex,
538                                  const TargetRegisterInfo *TRI) {
539   dbgs() << printReg(Reg, TRI, SubRegIndex) << "\n";
540 }
541 #endif
542