xref: /llvm-project/llvm/lib/CodeGen/MachineInstr.cpp (revision b3bb6f18bb5b2b8756b585b80d46d13ab3636a18)
1 //===- lib/CodeGen/MachineInstr.cpp ---------------------------------------===//
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 // Methods common to all machine instructions.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "llvm/CodeGen/MachineInstr.h"
14 #include "llvm/ADT/ArrayRef.h"
15 #include "llvm/ADT/Hashing.h"
16 #include "llvm/ADT/STLExtras.h"
17 #include "llvm/ADT/SmallBitVector.h"
18 #include "llvm/ADT/SmallVector.h"
19 #include "llvm/Analysis/AliasAnalysis.h"
20 #include "llvm/Analysis/MemoryLocation.h"
21 #include "llvm/CodeGen/MachineBasicBlock.h"
22 #include "llvm/CodeGen/MachineFrameInfo.h"
23 #include "llvm/CodeGen/MachineFunction.h"
24 #include "llvm/CodeGen/MachineInstrBuilder.h"
25 #include "llvm/CodeGen/MachineInstrBundle.h"
26 #include "llvm/CodeGen/MachineMemOperand.h"
27 #include "llvm/CodeGen/MachineModuleInfo.h"
28 #include "llvm/CodeGen/MachineOperand.h"
29 #include "llvm/CodeGen/MachineRegisterInfo.h"
30 #include "llvm/CodeGen/PseudoSourceValue.h"
31 #include "llvm/CodeGen/Register.h"
32 #include "llvm/CodeGen/StackMaps.h"
33 #include "llvm/CodeGen/TargetInstrInfo.h"
34 #include "llvm/CodeGen/TargetRegisterInfo.h"
35 #include "llvm/CodeGen/TargetSubtargetInfo.h"
36 #include "llvm/CodeGenTypes/LowLevelType.h"
37 #include "llvm/IR/Constants.h"
38 #include "llvm/IR/DebugInfoMetadata.h"
39 #include "llvm/IR/DebugLoc.h"
40 #include "llvm/IR/Function.h"
41 #include "llvm/IR/InlineAsm.h"
42 #include "llvm/IR/Instructions.h"
43 #include "llvm/IR/LLVMContext.h"
44 #include "llvm/IR/Metadata.h"
45 #include "llvm/IR/Module.h"
46 #include "llvm/IR/ModuleSlotTracker.h"
47 #include "llvm/IR/Operator.h"
48 #include "llvm/MC/MCInstrDesc.h"
49 #include "llvm/MC/MCRegisterInfo.h"
50 #include "llvm/Support/Casting.h"
51 #include "llvm/Support/Compiler.h"
52 #include "llvm/Support/Debug.h"
53 #include "llvm/Support/ErrorHandling.h"
54 #include "llvm/Support/FormattedStream.h"
55 #include "llvm/Support/raw_ostream.h"
56 #include "llvm/Target/TargetMachine.h"
57 #include <algorithm>
58 #include <cassert>
59 #include <cstdint>
60 #include <cstring>
61 #include <utility>
62 
63 using namespace llvm;
64 
65 static const MachineFunction *getMFIfAvailable(const MachineInstr &MI) {
66   if (const MachineBasicBlock *MBB = MI.getParent())
67     if (const MachineFunction *MF = MBB->getParent())
68       return MF;
69   return nullptr;
70 }
71 
72 // Try to crawl up to the machine function and get TRI and IntrinsicInfo from
73 // it.
74 static void tryToGetTargetInfo(const MachineInstr &MI,
75                                const TargetRegisterInfo *&TRI,
76                                const MachineRegisterInfo *&MRI,
77                                const TargetIntrinsicInfo *&IntrinsicInfo,
78                                const TargetInstrInfo *&TII) {
79 
80   if (const MachineFunction *MF = getMFIfAvailable(MI)) {
81     TRI = MF->getSubtarget().getRegisterInfo();
82     MRI = &MF->getRegInfo();
83     IntrinsicInfo = MF->getTarget().getIntrinsicInfo();
84     TII = MF->getSubtarget().getInstrInfo();
85   }
86 }
87 
88 void MachineInstr::addImplicitDefUseOperands(MachineFunction &MF) {
89   for (MCPhysReg ImpDef : MCID->implicit_defs())
90     addOperand(MF, MachineOperand::CreateReg(ImpDef, true, true));
91   for (MCPhysReg ImpUse : MCID->implicit_uses())
92     addOperand(MF, MachineOperand::CreateReg(ImpUse, false, true));
93 }
94 
95 /// MachineInstr ctor - This constructor creates a MachineInstr and adds the
96 /// implicit operands. It reserves space for the number of operands specified by
97 /// the MCInstrDesc.
98 MachineInstr::MachineInstr(MachineFunction &MF, const MCInstrDesc &TID,
99                            DebugLoc DL, bool NoImp)
100     : MCID(&TID), NumOperands(0), Flags(0), AsmPrinterFlags(0),
101       DbgLoc(std::move(DL)), DebugInstrNum(0), Opcode(TID.Opcode) {
102   assert(DbgLoc.hasTrivialDestructor() && "Expected trivial destructor");
103 
104   // Reserve space for the expected number of operands.
105   if (unsigned NumOps = MCID->getNumOperands() + MCID->implicit_defs().size() +
106                         MCID->implicit_uses().size()) {
107     CapOperands = OperandCapacity::get(NumOps);
108     Operands = MF.allocateOperandArray(CapOperands);
109   }
110 
111   if (!NoImp)
112     addImplicitDefUseOperands(MF);
113 }
114 
115 /// MachineInstr ctor - Copies MachineInstr arg exactly.
116 /// Does not copy the number from debug instruction numbering, to preserve
117 /// uniqueness.
118 MachineInstr::MachineInstr(MachineFunction &MF, const MachineInstr &MI)
119     : MCID(&MI.getDesc()), NumOperands(0), Flags(0), AsmPrinterFlags(0),
120       Info(MI.Info), DbgLoc(MI.getDebugLoc()), DebugInstrNum(0),
121       Opcode(MI.getOpcode()) {
122   assert(DbgLoc.hasTrivialDestructor() && "Expected trivial destructor");
123 
124   CapOperands = OperandCapacity::get(MI.getNumOperands());
125   Operands = MF.allocateOperandArray(CapOperands);
126 
127   // Copy operands.
128   for (const MachineOperand &MO : MI.operands())
129     addOperand(MF, MO);
130 
131   // Replicate ties between the operands, which addOperand was not
132   // able to do reliably.
133   for (unsigned i = 0, e = getNumOperands(); i < e; ++i) {
134     MachineOperand &NewMO = getOperand(i);
135     const MachineOperand &OrigMO = MI.getOperand(i);
136     NewMO.TiedTo = OrigMO.TiedTo;
137   }
138 
139   // Copy all the sensible flags.
140   setFlags(MI.Flags);
141 }
142 
143 void MachineInstr::setDesc(const MCInstrDesc &TID) {
144   if (getParent())
145     getMF()->handleChangeDesc(*this, TID);
146   MCID = &TID;
147   Opcode = TID.Opcode;
148 }
149 
150 void MachineInstr::moveBefore(MachineInstr *MovePos) {
151   MovePos->getParent()->splice(MovePos, getParent(), getIterator());
152 }
153 
154 /// getRegInfo - If this instruction is embedded into a MachineFunction,
155 /// return the MachineRegisterInfo object for the current function, otherwise
156 /// return null.
157 MachineRegisterInfo *MachineInstr::getRegInfo() {
158   if (MachineBasicBlock *MBB = getParent())
159     return &MBB->getParent()->getRegInfo();
160   return nullptr;
161 }
162 
163 const MachineRegisterInfo *MachineInstr::getRegInfo() const {
164   if (const MachineBasicBlock *MBB = getParent())
165     return &MBB->getParent()->getRegInfo();
166   return nullptr;
167 }
168 
169 void MachineInstr::removeRegOperandsFromUseLists(MachineRegisterInfo &MRI) {
170   for (MachineOperand &MO : operands())
171     if (MO.isReg())
172       MRI.removeRegOperandFromUseList(&MO);
173 }
174 
175 void MachineInstr::addRegOperandsToUseLists(MachineRegisterInfo &MRI) {
176   for (MachineOperand &MO : operands())
177     if (MO.isReg())
178       MRI.addRegOperandToUseList(&MO);
179 }
180 
181 void MachineInstr::addOperand(const MachineOperand &Op) {
182   MachineBasicBlock *MBB = getParent();
183   assert(MBB && "Use MachineInstrBuilder to add operands to dangling instrs");
184   MachineFunction *MF = MBB->getParent();
185   assert(MF && "Use MachineInstrBuilder to add operands to dangling instrs");
186   addOperand(*MF, Op);
187 }
188 
189 /// Move NumOps MachineOperands from Src to Dst, with support for overlapping
190 /// ranges. If MRI is non-null also update use-def chains.
191 static void moveOperands(MachineOperand *Dst, MachineOperand *Src,
192                          unsigned NumOps, MachineRegisterInfo *MRI) {
193   if (MRI)
194     return MRI->moveOperands(Dst, Src, NumOps);
195   // MachineOperand is a trivially copyable type so we can just use memmove.
196   assert(Dst && Src && "Unknown operands");
197   std::memmove(Dst, Src, NumOps * sizeof(MachineOperand));
198 }
199 
200 /// addOperand - Add the specified operand to the instruction.  If it is an
201 /// implicit operand, it is added to the end of the operand list.  If it is
202 /// an explicit operand it is added at the end of the explicit operand list
203 /// (before the first implicit operand).
204 void MachineInstr::addOperand(MachineFunction &MF, const MachineOperand &Op) {
205   assert(isUInt<LLVM_MI_NUMOPERANDS_BITS>(NumOperands + 1) &&
206          "Cannot add more operands.");
207   assert(MCID && "Cannot add operands before providing an instr descriptor");
208 
209   // Check if we're adding one of our existing operands.
210   if (&Op >= Operands && &Op < Operands + NumOperands) {
211     // This is unusual: MI->addOperand(MI->getOperand(i)).
212     // If adding Op requires reallocating or moving existing operands around,
213     // the Op reference could go stale. Support it by copying Op.
214     MachineOperand CopyOp(Op);
215     return addOperand(MF, CopyOp);
216   }
217 
218   // Find the insert location for the new operand.  Implicit registers go at
219   // the end, everything else goes before the implicit regs.
220   //
221   // FIXME: Allow mixed explicit and implicit operands on inline asm.
222   // InstrEmitter::EmitSpecialNode() is marking inline asm clobbers as
223   // implicit-defs, but they must not be moved around.  See the FIXME in
224   // InstrEmitter.cpp.
225   unsigned OpNo = getNumOperands();
226   bool isImpReg = Op.isReg() && Op.isImplicit();
227   if (!isImpReg && !isInlineAsm()) {
228     while (OpNo && Operands[OpNo-1].isReg() && Operands[OpNo-1].isImplicit()) {
229       --OpNo;
230       assert(!Operands[OpNo].isTied() && "Cannot move tied operands");
231     }
232   }
233 
234   // OpNo now points as the desired insertion point.  Unless this is a variadic
235   // instruction, only implicit regs are allowed beyond MCID->getNumOperands().
236   // RegMask operands go between the explicit and implicit operands.
237   MachineRegisterInfo *MRI = getRegInfo();
238 
239   // Determine if the Operands array needs to be reallocated.
240   // Save the old capacity and operand array.
241   OperandCapacity OldCap = CapOperands;
242   MachineOperand *OldOperands = Operands;
243   if (!OldOperands || OldCap.getSize() == getNumOperands()) {
244     CapOperands = OldOperands ? OldCap.getNext() : OldCap.get(1);
245     Operands = MF.allocateOperandArray(CapOperands);
246     // Move the operands before the insertion point.
247     if (OpNo)
248       moveOperands(Operands, OldOperands, OpNo, MRI);
249   }
250 
251   // Move the operands following the insertion point.
252   if (OpNo != NumOperands)
253     moveOperands(Operands + OpNo + 1, OldOperands + OpNo, NumOperands - OpNo,
254                  MRI);
255   ++NumOperands;
256 
257   // Deallocate the old operand array.
258   if (OldOperands != Operands && OldOperands)
259     MF.deallocateOperandArray(OldCap, OldOperands);
260 
261   // Copy Op into place. It still needs to be inserted into the MRI use lists.
262   MachineOperand *NewMO = new (Operands + OpNo) MachineOperand(Op);
263   NewMO->ParentMI = this;
264 
265   // When adding a register operand, tell MRI about it.
266   if (NewMO->isReg()) {
267     // Ensure isOnRegUseList() returns false, regardless of Op's status.
268     NewMO->Contents.Reg.Prev = nullptr;
269     // Ignore existing ties. This is not a property that can be copied.
270     NewMO->TiedTo = 0;
271     // Add the new operand to MRI, but only for instructions in an MBB.
272     if (MRI)
273       MRI->addRegOperandToUseList(NewMO);
274     // The MCID operand information isn't accurate until we start adding
275     // explicit operands. The implicit operands are added first, then the
276     // explicits are inserted before them.
277     if (!isImpReg) {
278       // Tie uses to defs as indicated in MCInstrDesc.
279       if (NewMO->isUse()) {
280         int DefIdx = MCID->getOperandConstraint(OpNo, MCOI::TIED_TO);
281         if (DefIdx != -1)
282           tieOperands(DefIdx, OpNo);
283       }
284       // If the register operand is flagged as early, mark the operand as such.
285       if (MCID->getOperandConstraint(OpNo, MCOI::EARLY_CLOBBER) != -1)
286         NewMO->setIsEarlyClobber(true);
287     }
288     // Ensure debug instructions set debug flag on register uses.
289     if (NewMO->isUse() && isDebugInstr())
290       NewMO->setIsDebug();
291   }
292 }
293 
294 void MachineInstr::removeOperand(unsigned OpNo) {
295   assert(OpNo < getNumOperands() && "Invalid operand number");
296   untieRegOperand(OpNo);
297 
298 #ifndef NDEBUG
299   // Moving tied operands would break the ties.
300   for (unsigned i = OpNo + 1, e = getNumOperands(); i != e; ++i)
301     if (Operands[i].isReg())
302       assert(!Operands[i].isTied() && "Cannot move tied operands");
303 #endif
304 
305   MachineRegisterInfo *MRI = getRegInfo();
306   if (MRI && Operands[OpNo].isReg())
307     MRI->removeRegOperandFromUseList(Operands + OpNo);
308 
309   // Don't call the MachineOperand destructor. A lot of this code depends on
310   // MachineOperand having a trivial destructor anyway, and adding a call here
311   // wouldn't make it 'destructor-correct'.
312 
313   if (unsigned N = NumOperands - 1 - OpNo)
314     moveOperands(Operands + OpNo, Operands + OpNo + 1, N, MRI);
315   --NumOperands;
316 }
317 
318 void MachineInstr::setExtraInfo(MachineFunction &MF,
319                                 ArrayRef<MachineMemOperand *> MMOs,
320                                 MCSymbol *PreInstrSymbol,
321                                 MCSymbol *PostInstrSymbol,
322                                 MDNode *HeapAllocMarker, MDNode *PCSections,
323                                 uint32_t CFIType, MDNode *MMRAs) {
324   bool HasPreInstrSymbol = PreInstrSymbol != nullptr;
325   bool HasPostInstrSymbol = PostInstrSymbol != nullptr;
326   bool HasHeapAllocMarker = HeapAllocMarker != nullptr;
327   bool HasPCSections = PCSections != nullptr;
328   bool HasCFIType = CFIType != 0;
329   bool HasMMRAs = MMRAs != nullptr;
330   int NumPointers = MMOs.size() + HasPreInstrSymbol + HasPostInstrSymbol +
331                     HasHeapAllocMarker + HasPCSections + HasCFIType + HasMMRAs;
332 
333   // Drop all extra info if there is none.
334   if (NumPointers <= 0) {
335     Info.clear();
336     return;
337   }
338 
339   // If more than one pointer, then store out of line. Store heap alloc markers
340   // out of line because PointerSumType cannot hold more than 4 tag types with
341   // 32-bit pointers.
342   // FIXME: Maybe we should make the symbols in the extra info mutable?
343   else if (NumPointers > 1 || HasMMRAs || HasHeapAllocMarker || HasPCSections ||
344            HasCFIType) {
345     Info.set<EIIK_OutOfLine>(
346         MF.createMIExtraInfo(MMOs, PreInstrSymbol, PostInstrSymbol,
347                              HeapAllocMarker, PCSections, CFIType, MMRAs));
348     return;
349   }
350 
351   // Otherwise store the single pointer inline.
352   if (HasPreInstrSymbol)
353     Info.set<EIIK_PreInstrSymbol>(PreInstrSymbol);
354   else if (HasPostInstrSymbol)
355     Info.set<EIIK_PostInstrSymbol>(PostInstrSymbol);
356   else
357     Info.set<EIIK_MMO>(MMOs[0]);
358 }
359 
360 void MachineInstr::dropMemRefs(MachineFunction &MF) {
361   if (memoperands_empty())
362     return;
363 
364   setExtraInfo(MF, {}, getPreInstrSymbol(), getPostInstrSymbol(),
365                getHeapAllocMarker(), getPCSections(), getCFIType(),
366                getMMRAMetadata());
367 }
368 
369 void MachineInstr::setMemRefs(MachineFunction &MF,
370                               ArrayRef<MachineMemOperand *> MMOs) {
371   if (MMOs.empty()) {
372     dropMemRefs(MF);
373     return;
374   }
375 
376   setExtraInfo(MF, MMOs, getPreInstrSymbol(), getPostInstrSymbol(),
377                getHeapAllocMarker(), getPCSections(), getCFIType(),
378                getMMRAMetadata());
379 }
380 
381 void MachineInstr::addMemOperand(MachineFunction &MF,
382                                  MachineMemOperand *MO) {
383   SmallVector<MachineMemOperand *, 2> MMOs;
384   MMOs.append(memoperands_begin(), memoperands_end());
385   MMOs.push_back(MO);
386   setMemRefs(MF, MMOs);
387 }
388 
389 void MachineInstr::cloneMemRefs(MachineFunction &MF, const MachineInstr &MI) {
390   if (this == &MI)
391     // Nothing to do for a self-clone!
392     return;
393 
394   assert(&MF == MI.getMF() &&
395          "Invalid machine functions when cloning memory refrences!");
396   // See if we can just steal the extra info already allocated for the
397   // instruction. We can do this whenever the pre- and post-instruction symbols
398   // are the same (including null).
399   if (getPreInstrSymbol() == MI.getPreInstrSymbol() &&
400       getPostInstrSymbol() == MI.getPostInstrSymbol() &&
401       getHeapAllocMarker() == MI.getHeapAllocMarker() &&
402       getPCSections() == MI.getPCSections() && getMMRAMetadata() &&
403       MI.getMMRAMetadata()) {
404     Info = MI.Info;
405     return;
406   }
407 
408   // Otherwise, fall back on a copy-based clone.
409   setMemRefs(MF, MI.memoperands());
410 }
411 
412 /// Check to see if the MMOs pointed to by the two MemRefs arrays are
413 /// identical.
414 static bool hasIdenticalMMOs(ArrayRef<MachineMemOperand *> LHS,
415                              ArrayRef<MachineMemOperand *> RHS) {
416   if (LHS.size() != RHS.size())
417     return false;
418 
419   auto LHSPointees = make_pointee_range(LHS);
420   auto RHSPointees = make_pointee_range(RHS);
421   return std::equal(LHSPointees.begin(), LHSPointees.end(),
422                     RHSPointees.begin());
423 }
424 
425 void MachineInstr::cloneMergedMemRefs(MachineFunction &MF,
426                                       ArrayRef<const MachineInstr *> MIs) {
427   // Try handling easy numbers of MIs with simpler mechanisms.
428   if (MIs.empty()) {
429     dropMemRefs(MF);
430     return;
431   }
432   if (MIs.size() == 1) {
433     cloneMemRefs(MF, *MIs[0]);
434     return;
435   }
436   // Because an empty memoperands list provides *no* information and must be
437   // handled conservatively (assuming the instruction can do anything), the only
438   // way to merge with it is to drop all other memoperands.
439   if (MIs[0]->memoperands_empty()) {
440     dropMemRefs(MF);
441     return;
442   }
443 
444   // Handle the general case.
445   SmallVector<MachineMemOperand *, 2> MergedMMOs;
446   // Start with the first instruction.
447   assert(&MF == MIs[0]->getMF() &&
448          "Invalid machine functions when cloning memory references!");
449   MergedMMOs.append(MIs[0]->memoperands_begin(), MIs[0]->memoperands_end());
450   // Now walk all the other instructions and accumulate any different MMOs.
451   for (const MachineInstr &MI : make_pointee_range(MIs.slice(1))) {
452     assert(&MF == MI.getMF() &&
453            "Invalid machine functions when cloning memory references!");
454 
455     // Skip MIs with identical operands to the first. This is a somewhat
456     // arbitrary hack but will catch common cases without being quadratic.
457     // TODO: We could fully implement merge semantics here if needed.
458     if (hasIdenticalMMOs(MIs[0]->memoperands(), MI.memoperands()))
459       continue;
460 
461     // Because an empty memoperands list provides *no* information and must be
462     // handled conservatively (assuming the instruction can do anything), the
463     // only way to merge with it is to drop all other memoperands.
464     if (MI.memoperands_empty()) {
465       dropMemRefs(MF);
466       return;
467     }
468 
469     // Otherwise accumulate these into our temporary buffer of the merged state.
470     MergedMMOs.append(MI.memoperands_begin(), MI.memoperands_end());
471   }
472 
473   setMemRefs(MF, MergedMMOs);
474 }
475 
476 void MachineInstr::setPreInstrSymbol(MachineFunction &MF, MCSymbol *Symbol) {
477   // Do nothing if old and new symbols are the same.
478   if (Symbol == getPreInstrSymbol())
479     return;
480 
481   // If there was only one symbol and we're removing it, just clear info.
482   if (!Symbol && Info.is<EIIK_PreInstrSymbol>()) {
483     Info.clear();
484     return;
485   }
486 
487   setExtraInfo(MF, memoperands(), Symbol, getPostInstrSymbol(),
488                getHeapAllocMarker(), getPCSections(), getCFIType(),
489                getMMRAMetadata());
490 }
491 
492 void MachineInstr::setPostInstrSymbol(MachineFunction &MF, MCSymbol *Symbol) {
493   // Do nothing if old and new symbols are the same.
494   if (Symbol == getPostInstrSymbol())
495     return;
496 
497   // If there was only one symbol and we're removing it, just clear info.
498   if (!Symbol && Info.is<EIIK_PostInstrSymbol>()) {
499     Info.clear();
500     return;
501   }
502 
503   setExtraInfo(MF, memoperands(), getPreInstrSymbol(), Symbol,
504                getHeapAllocMarker(), getPCSections(), getCFIType(),
505                getMMRAMetadata());
506 }
507 
508 void MachineInstr::setHeapAllocMarker(MachineFunction &MF, MDNode *Marker) {
509   // Do nothing if old and new symbols are the same.
510   if (Marker == getHeapAllocMarker())
511     return;
512 
513   setExtraInfo(MF, memoperands(), getPreInstrSymbol(), getPostInstrSymbol(),
514                Marker, getPCSections(), getCFIType(), getMMRAMetadata());
515 }
516 
517 void MachineInstr::setPCSections(MachineFunction &MF, MDNode *PCSections) {
518   // Do nothing if old and new symbols are the same.
519   if (PCSections == getPCSections())
520     return;
521 
522   setExtraInfo(MF, memoperands(), getPreInstrSymbol(), getPostInstrSymbol(),
523                getHeapAllocMarker(), PCSections, getCFIType(),
524                getMMRAMetadata());
525 }
526 
527 void MachineInstr::setCFIType(MachineFunction &MF, uint32_t Type) {
528   // Do nothing if old and new types are the same.
529   if (Type == getCFIType())
530     return;
531 
532   setExtraInfo(MF, memoperands(), getPreInstrSymbol(), getPostInstrSymbol(),
533                getHeapAllocMarker(), getPCSections(), Type, getMMRAMetadata());
534 }
535 
536 void MachineInstr::setMMRAMetadata(MachineFunction &MF, MDNode *MMRAs) {
537   // Do nothing if old and new symbols are the same.
538   if (MMRAs == getMMRAMetadata())
539     return;
540 
541   setExtraInfo(MF, memoperands(), getPreInstrSymbol(), getPostInstrSymbol(),
542                getHeapAllocMarker(), getPCSections(), getCFIType(), MMRAs);
543 }
544 
545 void MachineInstr::cloneInstrSymbols(MachineFunction &MF,
546                                      const MachineInstr &MI) {
547   if (this == &MI)
548     // Nothing to do for a self-clone!
549     return;
550 
551   assert(&MF == MI.getMF() &&
552          "Invalid machine functions when cloning instruction symbols!");
553 
554   setPreInstrSymbol(MF, MI.getPreInstrSymbol());
555   setPostInstrSymbol(MF, MI.getPostInstrSymbol());
556   setHeapAllocMarker(MF, MI.getHeapAllocMarker());
557   setPCSections(MF, MI.getPCSections());
558   setMMRAMetadata(MF, MI.getMMRAMetadata());
559 }
560 
561 uint32_t MachineInstr::mergeFlagsWith(const MachineInstr &Other) const {
562   // For now, the just return the union of the flags. If the flags get more
563   // complicated over time, we might need more logic here.
564   return getFlags() | Other.getFlags();
565 }
566 
567 uint32_t MachineInstr::copyFlagsFromInstruction(const Instruction &I) {
568   uint32_t MIFlags = 0;
569   // Copy the wrapping flags.
570   if (const OverflowingBinaryOperator *OB =
571           dyn_cast<OverflowingBinaryOperator>(&I)) {
572     if (OB->hasNoSignedWrap())
573       MIFlags |= MachineInstr::MIFlag::NoSWrap;
574     if (OB->hasNoUnsignedWrap())
575       MIFlags |= MachineInstr::MIFlag::NoUWrap;
576   } else if (const TruncInst *TI = dyn_cast<TruncInst>(&I)) {
577     if (TI->hasNoSignedWrap())
578       MIFlags |= MachineInstr::MIFlag::NoSWrap;
579     if (TI->hasNoUnsignedWrap())
580       MIFlags |= MachineInstr::MIFlag::NoUWrap;
581   } else if (const GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(&I)) {
582     if (GEP->hasNoUnsignedSignedWrap())
583       MIFlags |= MachineInstr::MIFlag::NoUSWrap;
584     if (GEP->hasNoUnsignedWrap())
585       MIFlags |= MachineInstr::MIFlag::NoUWrap;
586   }
587 
588   // Copy the nonneg flag.
589   if (const PossiblyNonNegInst *PNI = dyn_cast<PossiblyNonNegInst>(&I)) {
590     if (PNI->hasNonNeg())
591       MIFlags |= MachineInstr::MIFlag::NonNeg;
592     // Copy the disjoint flag.
593   } else if (const PossiblyDisjointInst *PD =
594                  dyn_cast<PossiblyDisjointInst>(&I)) {
595     if (PD->isDisjoint())
596       MIFlags |= MachineInstr::MIFlag::Disjoint;
597   }
598 
599   // Copy the samesign flag.
600   if (const ICmpInst *ICmp = dyn_cast<ICmpInst>(&I))
601     if (ICmp->hasSameSign())
602       MIFlags |= MachineInstr::MIFlag::SameSign;
603 
604   // Copy the exact flag.
605   if (const PossiblyExactOperator *PE = dyn_cast<PossiblyExactOperator>(&I))
606     if (PE->isExact())
607       MIFlags |= MachineInstr::MIFlag::IsExact;
608 
609   // Copy the fast-math flags.
610   if (const FPMathOperator *FP = dyn_cast<FPMathOperator>(&I)) {
611     const FastMathFlags Flags = FP->getFastMathFlags();
612     if (Flags.noNaNs())
613       MIFlags |= MachineInstr::MIFlag::FmNoNans;
614     if (Flags.noInfs())
615       MIFlags |= MachineInstr::MIFlag::FmNoInfs;
616     if (Flags.noSignedZeros())
617       MIFlags |= MachineInstr::MIFlag::FmNsz;
618     if (Flags.allowReciprocal())
619       MIFlags |= MachineInstr::MIFlag::FmArcp;
620     if (Flags.allowContract())
621       MIFlags |= MachineInstr::MIFlag::FmContract;
622     if (Flags.approxFunc())
623       MIFlags |= MachineInstr::MIFlag::FmAfn;
624     if (Flags.allowReassoc())
625       MIFlags |= MachineInstr::MIFlag::FmReassoc;
626   }
627 
628   if (I.getMetadata(LLVMContext::MD_unpredictable))
629     MIFlags |= MachineInstr::MIFlag::Unpredictable;
630 
631   return MIFlags;
632 }
633 
634 void MachineInstr::copyIRFlags(const Instruction &I) {
635   Flags = copyFlagsFromInstruction(I);
636 }
637 
638 bool MachineInstr::hasPropertyInBundle(uint64_t Mask, QueryType Type) const {
639   assert(!isBundledWithPred() && "Must be called on bundle header");
640   for (MachineBasicBlock::const_instr_iterator MII = getIterator();; ++MII) {
641     if (MII->getDesc().getFlags() & Mask) {
642       if (Type == AnyInBundle)
643         return true;
644     } else {
645       if (Type == AllInBundle && !MII->isBundle())
646         return false;
647     }
648     // This was the last instruction in the bundle.
649     if (!MII->isBundledWithSucc())
650       return Type == AllInBundle;
651   }
652 }
653 
654 bool MachineInstr::isIdenticalTo(const MachineInstr &Other,
655                                  MICheckType Check) const {
656   // If opcodes or number of operands are not the same then the two
657   // instructions are obviously not identical.
658   if (Other.getOpcode() != getOpcode() ||
659       Other.getNumOperands() != getNumOperands())
660     return false;
661 
662   if (isBundle()) {
663     // We have passed the test above that both instructions have the same
664     // opcode, so we know that both instructions are bundles here. Let's compare
665     // MIs inside the bundle.
666     assert(Other.isBundle() && "Expected that both instructions are bundles.");
667     MachineBasicBlock::const_instr_iterator I1 = getIterator();
668     MachineBasicBlock::const_instr_iterator I2 = Other.getIterator();
669     // Loop until we analysed the last intruction inside at least one of the
670     // bundles.
671     while (I1->isBundledWithSucc() && I2->isBundledWithSucc()) {
672       ++I1;
673       ++I2;
674       if (!I1->isIdenticalTo(*I2, Check))
675         return false;
676     }
677     // If we've reached the end of just one of the two bundles, but not both,
678     // the instructions are not identical.
679     if (I1->isBundledWithSucc() || I2->isBundledWithSucc())
680       return false;
681   }
682 
683   // Check operands to make sure they match.
684   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
685     const MachineOperand &MO = getOperand(i);
686     const MachineOperand &OMO = Other.getOperand(i);
687     if (!MO.isReg()) {
688       if (!MO.isIdenticalTo(OMO))
689         return false;
690       continue;
691     }
692 
693     // Clients may or may not want to ignore defs when testing for equality.
694     // For example, machine CSE pass only cares about finding common
695     // subexpressions, so it's safe to ignore virtual register defs.
696     if (MO.isDef()) {
697       if (Check == IgnoreDefs)
698         continue;
699       else if (Check == IgnoreVRegDefs) {
700         if (!MO.getReg().isVirtual() || !OMO.getReg().isVirtual())
701           if (!MO.isIdenticalTo(OMO))
702             return false;
703       } else {
704         if (!MO.isIdenticalTo(OMO))
705           return false;
706         if (Check == CheckKillDead && MO.isDead() != OMO.isDead())
707           return false;
708       }
709     } else {
710       if (!MO.isIdenticalTo(OMO))
711         return false;
712       if (Check == CheckKillDead && MO.isKill() != OMO.isKill())
713         return false;
714     }
715   }
716   // If DebugLoc does not match then two debug instructions are not identical.
717   if (isDebugInstr())
718     if (getDebugLoc() && Other.getDebugLoc() &&
719         getDebugLoc() != Other.getDebugLoc())
720       return false;
721   // If pre- or post-instruction symbols do not match then the two instructions
722   // are not identical.
723   if (getPreInstrSymbol() != Other.getPreInstrSymbol() ||
724       getPostInstrSymbol() != Other.getPostInstrSymbol())
725     return false;
726   // Call instructions with different CFI types are not identical.
727   if (isCall() && getCFIType() != Other.getCFIType())
728     return false;
729 
730   return true;
731 }
732 
733 bool MachineInstr::isEquivalentDbgInstr(const MachineInstr &Other) const {
734   if (!isDebugValueLike() || !Other.isDebugValueLike())
735     return false;
736   if (getDebugLoc() != Other.getDebugLoc())
737     return false;
738   if (getDebugVariable() != Other.getDebugVariable())
739     return false;
740   if (getNumDebugOperands() != Other.getNumDebugOperands())
741     return false;
742   for (unsigned OpIdx = 0; OpIdx < getNumDebugOperands(); ++OpIdx)
743     if (!getDebugOperand(OpIdx).isIdenticalTo(Other.getDebugOperand(OpIdx)))
744       return false;
745   if (!DIExpression::isEqualExpression(
746           getDebugExpression(), isIndirectDebugValue(),
747           Other.getDebugExpression(), Other.isIndirectDebugValue()))
748     return false;
749   return true;
750 }
751 
752 const MachineFunction *MachineInstr::getMF() const {
753   return getParent()->getParent();
754 }
755 
756 MachineInstr *MachineInstr::removeFromParent() {
757   assert(getParent() && "Not embedded in a basic block!");
758   return getParent()->remove(this);
759 }
760 
761 MachineInstr *MachineInstr::removeFromBundle() {
762   assert(getParent() && "Not embedded in a basic block!");
763   return getParent()->remove_instr(this);
764 }
765 
766 void MachineInstr::eraseFromParent() {
767   assert(getParent() && "Not embedded in a basic block!");
768   getParent()->erase(this);
769 }
770 
771 void MachineInstr::eraseFromBundle() {
772   assert(getParent() && "Not embedded in a basic block!");
773   getParent()->erase_instr(this);
774 }
775 
776 bool MachineInstr::isCandidateForCallSiteEntry(QueryType Type) const {
777   if (!isCall(Type))
778     return false;
779   switch (getOpcode()) {
780   case TargetOpcode::PATCHPOINT:
781   case TargetOpcode::STACKMAP:
782   case TargetOpcode::STATEPOINT:
783   case TargetOpcode::FENTRY_CALL:
784     return false;
785   }
786   return true;
787 }
788 
789 bool MachineInstr::shouldUpdateCallSiteInfo() const {
790   if (isBundle())
791     return isCandidateForCallSiteEntry(MachineInstr::AnyInBundle);
792   return isCandidateForCallSiteEntry();
793 }
794 
795 unsigned MachineInstr::getNumExplicitOperands() const {
796   unsigned NumOperands = MCID->getNumOperands();
797   if (!MCID->isVariadic())
798     return NumOperands;
799 
800   for (unsigned I = NumOperands, E = getNumOperands(); I != E; ++I) {
801     const MachineOperand &MO = getOperand(I);
802     // The operands must always be in the following order:
803     // - explicit reg defs,
804     // - other explicit operands (reg uses, immediates, etc.),
805     // - implicit reg defs
806     // - implicit reg uses
807     if (MO.isReg() && MO.isImplicit())
808       break;
809     ++NumOperands;
810   }
811   return NumOperands;
812 }
813 
814 unsigned MachineInstr::getNumExplicitDefs() const {
815   unsigned NumDefs = MCID->getNumDefs();
816   if (!MCID->isVariadic())
817     return NumDefs;
818 
819   for (unsigned I = NumDefs, E = getNumOperands(); I != E; ++I) {
820     const MachineOperand &MO = getOperand(I);
821     if (!MO.isReg() || !MO.isDef() || MO.isImplicit())
822       break;
823     ++NumDefs;
824   }
825   return NumDefs;
826 }
827 
828 void MachineInstr::bundleWithPred() {
829   assert(!isBundledWithPred() && "MI is already bundled with its predecessor");
830   setFlag(BundledPred);
831   MachineBasicBlock::instr_iterator Pred = getIterator();
832   --Pred;
833   assert(!Pred->isBundledWithSucc() && "Inconsistent bundle flags");
834   Pred->setFlag(BundledSucc);
835 }
836 
837 void MachineInstr::bundleWithSucc() {
838   assert(!isBundledWithSucc() && "MI is already bundled with its successor");
839   setFlag(BundledSucc);
840   MachineBasicBlock::instr_iterator Succ = getIterator();
841   ++Succ;
842   assert(!Succ->isBundledWithPred() && "Inconsistent bundle flags");
843   Succ->setFlag(BundledPred);
844 }
845 
846 void MachineInstr::unbundleFromPred() {
847   assert(isBundledWithPred() && "MI isn't bundled with its predecessor");
848   clearFlag(BundledPred);
849   MachineBasicBlock::instr_iterator Pred = getIterator();
850   --Pred;
851   assert(Pred->isBundledWithSucc() && "Inconsistent bundle flags");
852   Pred->clearFlag(BundledSucc);
853 }
854 
855 void MachineInstr::unbundleFromSucc() {
856   assert(isBundledWithSucc() && "MI isn't bundled with its successor");
857   clearFlag(BundledSucc);
858   MachineBasicBlock::instr_iterator Succ = getIterator();
859   ++Succ;
860   assert(Succ->isBundledWithPred() && "Inconsistent bundle flags");
861   Succ->clearFlag(BundledPred);
862 }
863 
864 bool MachineInstr::isStackAligningInlineAsm() const {
865   if (isInlineAsm()) {
866     unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm();
867     if (ExtraInfo & InlineAsm::Extra_IsAlignStack)
868       return true;
869   }
870   return false;
871 }
872 
873 InlineAsm::AsmDialect MachineInstr::getInlineAsmDialect() const {
874   assert(isInlineAsm() && "getInlineAsmDialect() only works for inline asms!");
875   unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm();
876   return InlineAsm::AsmDialect((ExtraInfo & InlineAsm::Extra_AsmDialect) != 0);
877 }
878 
879 int MachineInstr::findInlineAsmFlagIdx(unsigned OpIdx,
880                                        unsigned *GroupNo) const {
881   assert(isInlineAsm() && "Expected an inline asm instruction");
882   assert(OpIdx < getNumOperands() && "OpIdx out of range");
883 
884   // Ignore queries about the initial operands.
885   if (OpIdx < InlineAsm::MIOp_FirstOperand)
886     return -1;
887 
888   unsigned Group = 0;
889   unsigned NumOps;
890   for (unsigned i = InlineAsm::MIOp_FirstOperand, e = getNumOperands(); i < e;
891        i += NumOps) {
892     const MachineOperand &FlagMO = getOperand(i);
893     // If we reach the implicit register operands, stop looking.
894     if (!FlagMO.isImm())
895       return -1;
896     const InlineAsm::Flag F(FlagMO.getImm());
897     NumOps = 1 + F.getNumOperandRegisters();
898     if (i + NumOps > OpIdx) {
899       if (GroupNo)
900         *GroupNo = Group;
901       return i;
902     }
903     ++Group;
904   }
905   return -1;
906 }
907 
908 const DILabel *MachineInstr::getDebugLabel() const {
909   assert(isDebugLabel() && "not a DBG_LABEL");
910   return cast<DILabel>(getOperand(0).getMetadata());
911 }
912 
913 const MachineOperand &MachineInstr::getDebugVariableOp() const {
914   assert((isDebugValueLike()) && "not a DBG_VALUE*");
915   unsigned VariableOp = isNonListDebugValue() ? 2 : 0;
916   return getOperand(VariableOp);
917 }
918 
919 MachineOperand &MachineInstr::getDebugVariableOp() {
920   assert((isDebugValueLike()) && "not a DBG_VALUE*");
921   unsigned VariableOp = isNonListDebugValue() ? 2 : 0;
922   return getOperand(VariableOp);
923 }
924 
925 const DILocalVariable *MachineInstr::getDebugVariable() const {
926   return cast<DILocalVariable>(getDebugVariableOp().getMetadata());
927 }
928 
929 const MachineOperand &MachineInstr::getDebugExpressionOp() const {
930   assert((isDebugValueLike()) && "not a DBG_VALUE*");
931   unsigned ExpressionOp = isNonListDebugValue() ? 3 : 1;
932   return getOperand(ExpressionOp);
933 }
934 
935 MachineOperand &MachineInstr::getDebugExpressionOp() {
936   assert((isDebugValueLike()) && "not a DBG_VALUE*");
937   unsigned ExpressionOp = isNonListDebugValue() ? 3 : 1;
938   return getOperand(ExpressionOp);
939 }
940 
941 const DIExpression *MachineInstr::getDebugExpression() const {
942   return cast<DIExpression>(getDebugExpressionOp().getMetadata());
943 }
944 
945 bool MachineInstr::isDebugEntryValue() const {
946   return isDebugValue() && getDebugExpression()->isEntryValue();
947 }
948 
949 const TargetRegisterClass*
950 MachineInstr::getRegClassConstraint(unsigned OpIdx,
951                                     const TargetInstrInfo *TII,
952                                     const TargetRegisterInfo *TRI) const {
953   assert(getParent() && "Can't have an MBB reference here!");
954   assert(getMF() && "Can't have an MF reference here!");
955   const MachineFunction &MF = *getMF();
956 
957   // Most opcodes have fixed constraints in their MCInstrDesc.
958   if (!isInlineAsm())
959     return TII->getRegClass(getDesc(), OpIdx, TRI, MF);
960 
961   if (!getOperand(OpIdx).isReg())
962     return nullptr;
963 
964   // For tied uses on inline asm, get the constraint from the def.
965   unsigned DefIdx;
966   if (getOperand(OpIdx).isUse() && isRegTiedToDefOperand(OpIdx, &DefIdx))
967     OpIdx = DefIdx;
968 
969   // Inline asm stores register class constraints in the flag word.
970   int FlagIdx = findInlineAsmFlagIdx(OpIdx);
971   if (FlagIdx < 0)
972     return nullptr;
973 
974   const InlineAsm::Flag F(getOperand(FlagIdx).getImm());
975   unsigned RCID;
976   if ((F.isRegUseKind() || F.isRegDefKind() || F.isRegDefEarlyClobberKind()) &&
977       F.hasRegClassConstraint(RCID))
978     return TRI->getRegClass(RCID);
979 
980   // Assume that all registers in a memory operand are pointers.
981   if (F.isMemKind())
982     return TRI->getPointerRegClass(MF);
983 
984   return nullptr;
985 }
986 
987 const TargetRegisterClass *MachineInstr::getRegClassConstraintEffectForVReg(
988     Register Reg, const TargetRegisterClass *CurRC, const TargetInstrInfo *TII,
989     const TargetRegisterInfo *TRI, bool ExploreBundle) const {
990   // Check every operands inside the bundle if we have
991   // been asked to.
992   if (ExploreBundle)
993     for (ConstMIBundleOperands OpndIt(*this); OpndIt.isValid() && CurRC;
994          ++OpndIt)
995       CurRC = OpndIt->getParent()->getRegClassConstraintEffectForVRegImpl(
996           OpndIt.getOperandNo(), Reg, CurRC, TII, TRI);
997   else
998     // Otherwise, just check the current operands.
999     for (unsigned i = 0, e = NumOperands; i < e && CurRC; ++i)
1000       CurRC = getRegClassConstraintEffectForVRegImpl(i, Reg, CurRC, TII, TRI);
1001   return CurRC;
1002 }
1003 
1004 const TargetRegisterClass *MachineInstr::getRegClassConstraintEffectForVRegImpl(
1005     unsigned OpIdx, Register Reg, const TargetRegisterClass *CurRC,
1006     const TargetInstrInfo *TII, const TargetRegisterInfo *TRI) const {
1007   assert(CurRC && "Invalid initial register class");
1008   // Check if Reg is constrained by some of its use/def from MI.
1009   const MachineOperand &MO = getOperand(OpIdx);
1010   if (!MO.isReg() || MO.getReg() != Reg)
1011     return CurRC;
1012   // If yes, accumulate the constraints through the operand.
1013   return getRegClassConstraintEffect(OpIdx, CurRC, TII, TRI);
1014 }
1015 
1016 const TargetRegisterClass *MachineInstr::getRegClassConstraintEffect(
1017     unsigned OpIdx, const TargetRegisterClass *CurRC,
1018     const TargetInstrInfo *TII, const TargetRegisterInfo *TRI) const {
1019   const TargetRegisterClass *OpRC = getRegClassConstraint(OpIdx, TII, TRI);
1020   const MachineOperand &MO = getOperand(OpIdx);
1021   assert(MO.isReg() &&
1022          "Cannot get register constraints for non-register operand");
1023   assert(CurRC && "Invalid initial register class");
1024   if (unsigned SubIdx = MO.getSubReg()) {
1025     if (OpRC)
1026       CurRC = TRI->getMatchingSuperRegClass(CurRC, OpRC, SubIdx);
1027     else
1028       CurRC = TRI->getSubClassWithSubReg(CurRC, SubIdx);
1029   } else if (OpRC)
1030     CurRC = TRI->getCommonSubClass(CurRC, OpRC);
1031   return CurRC;
1032 }
1033 
1034 /// Return the number of instructions inside the MI bundle, not counting the
1035 /// header instruction.
1036 unsigned MachineInstr::getBundleSize() const {
1037   MachineBasicBlock::const_instr_iterator I = getIterator();
1038   unsigned Size = 0;
1039   while (I->isBundledWithSucc()) {
1040     ++Size;
1041     ++I;
1042   }
1043   return Size;
1044 }
1045 
1046 /// Returns true if the MachineInstr has an implicit-use operand of exactly
1047 /// the given register (not considering sub/super-registers).
1048 bool MachineInstr::hasRegisterImplicitUseOperand(Register Reg) const {
1049   for (const MachineOperand &MO : implicit_operands()) {
1050     if (MO.isReg() && MO.isUse() && MO.getReg() == Reg)
1051       return true;
1052   }
1053   return false;
1054 }
1055 
1056 /// findRegisterUseOperandIdx() - Returns the MachineOperand that is a use of
1057 /// the specific register or -1 if it is not found. It further tightens
1058 /// the search criteria to a use that kills the register if isKill is true.
1059 int MachineInstr::findRegisterUseOperandIdx(Register Reg,
1060                                             const TargetRegisterInfo *TRI,
1061                                             bool isKill) const {
1062   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1063     const MachineOperand &MO = getOperand(i);
1064     if (!MO.isReg() || !MO.isUse())
1065       continue;
1066     Register MOReg = MO.getReg();
1067     if (!MOReg)
1068       continue;
1069     if (MOReg == Reg || (TRI && Reg && MOReg && TRI->regsOverlap(MOReg, Reg)))
1070       if (!isKill || MO.isKill())
1071         return i;
1072   }
1073   return -1;
1074 }
1075 
1076 /// readsWritesVirtualRegister - Return a pair of bools (reads, writes)
1077 /// indicating if this instruction reads or writes Reg. This also considers
1078 /// partial defines.
1079 std::pair<bool,bool>
1080 MachineInstr::readsWritesVirtualRegister(Register Reg,
1081                                          SmallVectorImpl<unsigned> *Ops) const {
1082   bool PartDef = false; // Partial redefine.
1083   bool FullDef = false; // Full define.
1084   bool Use = false;
1085 
1086   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1087     const MachineOperand &MO = getOperand(i);
1088     if (!MO.isReg() || MO.getReg() != Reg)
1089       continue;
1090     if (Ops)
1091       Ops->push_back(i);
1092     if (MO.isUse())
1093       Use |= !MO.isUndef();
1094     else if (MO.getSubReg() && !MO.isUndef())
1095       // A partial def undef doesn't count as reading the register.
1096       PartDef = true;
1097     else
1098       FullDef = true;
1099   }
1100   // A partial redefine uses Reg unless there is also a full define.
1101   return std::make_pair(Use || (PartDef && !FullDef), PartDef || FullDef);
1102 }
1103 
1104 /// findRegisterDefOperandIdx() - Returns the operand index that is a def of
1105 /// the specified register or -1 if it is not found. If isDead is true, defs
1106 /// that are not dead are skipped. If TargetRegisterInfo is non-null, then it
1107 /// also checks if there is a def of a super-register.
1108 int MachineInstr::findRegisterDefOperandIdx(Register Reg,
1109                                             const TargetRegisterInfo *TRI,
1110                                             bool isDead, bool Overlap) const {
1111   bool isPhys = Reg.isPhysical();
1112   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1113     const MachineOperand &MO = getOperand(i);
1114     // Accept regmask operands when Overlap is set.
1115     // Ignore them when looking for a specific def operand (Overlap == false).
1116     if (isPhys && Overlap && MO.isRegMask() && MO.clobbersPhysReg(Reg))
1117       return i;
1118     if (!MO.isReg() || !MO.isDef())
1119       continue;
1120     Register MOReg = MO.getReg();
1121     bool Found = (MOReg == Reg);
1122     if (!Found && TRI && isPhys && MOReg.isPhysical()) {
1123       if (Overlap)
1124         Found = TRI->regsOverlap(MOReg, Reg);
1125       else
1126         Found = TRI->isSubRegister(MOReg, Reg);
1127     }
1128     if (Found && (!isDead || MO.isDead()))
1129       return i;
1130   }
1131   return -1;
1132 }
1133 
1134 /// findFirstPredOperandIdx() - Find the index of the first operand in the
1135 /// operand list that is used to represent the predicate. It returns -1 if
1136 /// none is found.
1137 int MachineInstr::findFirstPredOperandIdx() const {
1138   // Don't call MCID.findFirstPredOperandIdx() because this variant
1139   // is sometimes called on an instruction that's not yet complete, and
1140   // so the number of operands is less than the MCID indicates. In
1141   // particular, the PTX target does this.
1142   const MCInstrDesc &MCID = getDesc();
1143   if (MCID.isPredicable()) {
1144     for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
1145       if (MCID.operands()[i].isPredicate())
1146         return i;
1147   }
1148 
1149   return -1;
1150 }
1151 
1152 // MachineOperand::TiedTo is 4 bits wide.
1153 const unsigned TiedMax = 15;
1154 
1155 /// tieOperands - Mark operands at DefIdx and UseIdx as tied to each other.
1156 ///
1157 /// Use and def operands can be tied together, indicated by a non-zero TiedTo
1158 /// field. TiedTo can have these values:
1159 ///
1160 /// 0:              Operand is not tied to anything.
1161 /// 1 to TiedMax-1: Tied to getOperand(TiedTo-1).
1162 /// TiedMax:        Tied to an operand >= TiedMax-1.
1163 ///
1164 /// The tied def must be one of the first TiedMax operands on a normal
1165 /// instruction. INLINEASM instructions allow more tied defs.
1166 ///
1167 void MachineInstr::tieOperands(unsigned DefIdx, unsigned UseIdx) {
1168   MachineOperand &DefMO = getOperand(DefIdx);
1169   MachineOperand &UseMO = getOperand(UseIdx);
1170   assert(DefMO.isDef() && "DefIdx must be a def operand");
1171   assert(UseMO.isUse() && "UseIdx must be a use operand");
1172   assert(!DefMO.isTied() && "Def is already tied to another use");
1173   assert(!UseMO.isTied() && "Use is already tied to another def");
1174 
1175   if (DefIdx < TiedMax)
1176     UseMO.TiedTo = DefIdx + 1;
1177   else {
1178     // Inline asm can use the group descriptors to find tied operands,
1179     // statepoint tied operands are trivial to match (1-1 reg def with reg use),
1180     // but on normal instruction, the tied def must be within the first TiedMax
1181     // operands.
1182     assert((isInlineAsm() || getOpcode() == TargetOpcode::STATEPOINT) &&
1183            "DefIdx out of range");
1184     UseMO.TiedTo = TiedMax;
1185   }
1186 
1187   // UseIdx can be out of range, we'll search for it in findTiedOperandIdx().
1188   DefMO.TiedTo = std::min(UseIdx + 1, TiedMax);
1189 }
1190 
1191 /// Given the index of a tied register operand, find the operand it is tied to.
1192 /// Defs are tied to uses and vice versa. Returns the index of the tied operand
1193 /// which must exist.
1194 unsigned MachineInstr::findTiedOperandIdx(unsigned OpIdx) const {
1195   const MachineOperand &MO = getOperand(OpIdx);
1196   assert(MO.isTied() && "Operand isn't tied");
1197 
1198   // Normally TiedTo is in range.
1199   if (MO.TiedTo < TiedMax)
1200     return MO.TiedTo - 1;
1201 
1202   // Uses on normal instructions can be out of range.
1203   if (!isInlineAsm() && getOpcode() != TargetOpcode::STATEPOINT) {
1204     // Normal tied defs must be in the 0..TiedMax-1 range.
1205     if (MO.isUse())
1206       return TiedMax - 1;
1207     // MO is a def. Search for the tied use.
1208     for (unsigned i = TiedMax - 1, e = getNumOperands(); i != e; ++i) {
1209       const MachineOperand &UseMO = getOperand(i);
1210       if (UseMO.isReg() && UseMO.isUse() && UseMO.TiedTo == OpIdx + 1)
1211         return i;
1212     }
1213     llvm_unreachable("Can't find tied use");
1214   }
1215 
1216   if (getOpcode() == TargetOpcode::STATEPOINT) {
1217     // In STATEPOINT defs correspond 1-1 to GC pointer operands passed
1218     // on registers.
1219     StatepointOpers SO(this);
1220     unsigned CurUseIdx = SO.getFirstGCPtrIdx();
1221     assert(CurUseIdx != -1U && "only gc pointer statepoint operands can be tied");
1222     unsigned NumDefs = getNumDefs();
1223     for (unsigned CurDefIdx = 0; CurDefIdx < NumDefs; ++CurDefIdx) {
1224       while (!getOperand(CurUseIdx).isReg())
1225         CurUseIdx = StackMaps::getNextMetaArgIdx(this, CurUseIdx);
1226       if (OpIdx == CurDefIdx)
1227         return CurUseIdx;
1228       if (OpIdx == CurUseIdx)
1229         return CurDefIdx;
1230       CurUseIdx = StackMaps::getNextMetaArgIdx(this, CurUseIdx);
1231     }
1232     llvm_unreachable("Can't find tied use");
1233   }
1234 
1235   // Now deal with inline asm by parsing the operand group descriptor flags.
1236   // Find the beginning of each operand group.
1237   SmallVector<unsigned, 8> GroupIdx;
1238   unsigned OpIdxGroup = ~0u;
1239   unsigned NumOps;
1240   for (unsigned i = InlineAsm::MIOp_FirstOperand, e = getNumOperands(); i < e;
1241        i += NumOps) {
1242     const MachineOperand &FlagMO = getOperand(i);
1243     assert(FlagMO.isImm() && "Invalid tied operand on inline asm");
1244     unsigned CurGroup = GroupIdx.size();
1245     GroupIdx.push_back(i);
1246     const InlineAsm::Flag F(FlagMO.getImm());
1247     NumOps = 1 + F.getNumOperandRegisters();
1248     // OpIdx belongs to this operand group.
1249     if (OpIdx > i && OpIdx < i + NumOps)
1250       OpIdxGroup = CurGroup;
1251     unsigned TiedGroup;
1252     if (!F.isUseOperandTiedToDef(TiedGroup))
1253       continue;
1254     // Operands in this group are tied to operands in TiedGroup which must be
1255     // earlier. Find the number of operands between the two groups.
1256     unsigned Delta = i - GroupIdx[TiedGroup];
1257 
1258     // OpIdx is a use tied to TiedGroup.
1259     if (OpIdxGroup == CurGroup)
1260       return OpIdx - Delta;
1261 
1262     // OpIdx is a def tied to this use group.
1263     if (OpIdxGroup == TiedGroup)
1264       return OpIdx + Delta;
1265   }
1266   llvm_unreachable("Invalid tied operand on inline asm");
1267 }
1268 
1269 /// clearKillInfo - Clears kill flags on all operands.
1270 ///
1271 void MachineInstr::clearKillInfo() {
1272   for (MachineOperand &MO : operands()) {
1273     if (MO.isReg() && MO.isUse())
1274       MO.setIsKill(false);
1275   }
1276 }
1277 
1278 void MachineInstr::substituteRegister(Register FromReg, Register ToReg,
1279                                       unsigned SubIdx,
1280                                       const TargetRegisterInfo &RegInfo) {
1281   if (ToReg.isPhysical()) {
1282     if (SubIdx)
1283       ToReg = RegInfo.getSubReg(ToReg, SubIdx);
1284     for (MachineOperand &MO : operands()) {
1285       if (!MO.isReg() || MO.getReg() != FromReg)
1286         continue;
1287       MO.substPhysReg(ToReg, RegInfo);
1288     }
1289   } else {
1290     for (MachineOperand &MO : operands()) {
1291       if (!MO.isReg() || MO.getReg() != FromReg)
1292         continue;
1293       MO.substVirtReg(ToReg, SubIdx, RegInfo);
1294     }
1295   }
1296 }
1297 
1298 /// isSafeToMove - Return true if it is safe to move this instruction. If
1299 /// SawStore is set to true, it means that there is a store (or call) between
1300 /// the instruction's location and its intended destination.
1301 bool MachineInstr::isSafeToMove(bool &SawStore) const {
1302   // Ignore stuff that we obviously can't move.
1303   //
1304   // Treat volatile loads as stores. This is not strictly necessary for
1305   // volatiles, but it is required for atomic loads. It is not allowed to move
1306   // a load across an atomic load with Ordering > Monotonic.
1307   if (mayStore() || isCall() || isPHI() ||
1308       (mayLoad() && hasOrderedMemoryRef())) {
1309     SawStore = true;
1310     return false;
1311   }
1312 
1313   if (isPosition() || isDebugInstr() || isTerminator() ||
1314       mayRaiseFPException() || hasUnmodeledSideEffects() ||
1315       isJumpTableDebugInfo())
1316     return false;
1317 
1318   // See if this instruction does a load.  If so, we have to guarantee that the
1319   // loaded value doesn't change between the load and the its intended
1320   // destination. The check for isInvariantLoad gives the target the chance to
1321   // classify the load as always returning a constant, e.g. a constant pool
1322   // load.
1323   if (mayLoad() && !isDereferenceableInvariantLoad())
1324     // Otherwise, this is a real load.  If there is a store between the load and
1325     // end of block, we can't move it.
1326     return !SawStore;
1327 
1328   return true;
1329 }
1330 
1331 bool MachineInstr::wouldBeTriviallyDead() const {
1332   // Don't delete frame allocation labels.
1333   // FIXME: Why is LOCAL_ESCAPE not considered in MachineInstr::isLabel?
1334   if (getOpcode() == TargetOpcode::LOCAL_ESCAPE)
1335     return false;
1336 
1337   // Don't delete FAKE_USE.
1338   // FIXME: Why is FAKE_USE not considered in MachineInstr::isPosition?
1339   if (isFakeUse())
1340     return false;
1341 
1342   // LIFETIME markers should be preserved.
1343   // FIXME: Why are LIFETIME markers not considered in MachineInstr::isPosition?
1344   if (isLifetimeMarker())
1345     return false;
1346 
1347   // If we can move an instruction, we can remove it.  Otherwise, it has
1348   // a side-effect of some sort.
1349   bool SawStore = false;
1350   return isPHI() || isSafeToMove(SawStore);
1351 }
1352 
1353 static bool MemOperandsHaveAlias(const MachineFrameInfo &MFI, AAResults *AA,
1354                                  bool UseTBAA, const MachineMemOperand *MMOa,
1355                                  const MachineMemOperand *MMOb) {
1356   // The following interface to AA is fashioned after DAGCombiner::isAlias and
1357   // operates with MachineMemOperand offset with some important assumptions:
1358   //   - LLVM fundamentally assumes flat address spaces.
1359   //   - MachineOperand offset can *only* result from legalization and cannot
1360   //     affect queries other than the trivial case of overlap checking.
1361   //   - These offsets never wrap and never step outside of allocated objects.
1362   //   - There should never be any negative offsets here.
1363   //
1364   // FIXME: Modify API to hide this math from "user"
1365   // Even before we go to AA we can reason locally about some memory objects. It
1366   // can save compile time, and possibly catch some corner cases not currently
1367   // covered.
1368 
1369   int64_t OffsetA = MMOa->getOffset();
1370   int64_t OffsetB = MMOb->getOffset();
1371   int64_t MinOffset = std::min(OffsetA, OffsetB);
1372 
1373   LocationSize WidthA = MMOa->getSize();
1374   LocationSize WidthB = MMOb->getSize();
1375   bool KnownWidthA = WidthA.hasValue();
1376   bool KnownWidthB = WidthB.hasValue();
1377   bool BothMMONonScalable = !WidthA.isScalable() && !WidthB.isScalable();
1378 
1379   const Value *ValA = MMOa->getValue();
1380   const Value *ValB = MMOb->getValue();
1381   bool SameVal = (ValA && ValB && (ValA == ValB));
1382   if (!SameVal) {
1383     const PseudoSourceValue *PSVa = MMOa->getPseudoValue();
1384     const PseudoSourceValue *PSVb = MMOb->getPseudoValue();
1385     if (PSVa && ValB && !PSVa->mayAlias(&MFI))
1386       return false;
1387     if (PSVb && ValA && !PSVb->mayAlias(&MFI))
1388       return false;
1389     if (PSVa && PSVb && (PSVa == PSVb))
1390       SameVal = true;
1391   }
1392 
1393   if (SameVal && BothMMONonScalable) {
1394     if (!KnownWidthA || !KnownWidthB)
1395       return true;
1396     int64_t MaxOffset = std::max(OffsetA, OffsetB);
1397     int64_t LowWidth = (MinOffset == OffsetA)
1398                            ? WidthA.getValue().getKnownMinValue()
1399                            : WidthB.getValue().getKnownMinValue();
1400     return (MinOffset + LowWidth > MaxOffset);
1401   }
1402 
1403   if (!AA)
1404     return true;
1405 
1406   if (!ValA || !ValB)
1407     return true;
1408 
1409   assert((OffsetA >= 0) && "Negative MachineMemOperand offset");
1410   assert((OffsetB >= 0) && "Negative MachineMemOperand offset");
1411 
1412   // If Scalable Location Size has non-zero offset, Width + Offset does not work
1413   // at the moment
1414   if ((WidthA.isScalable() && OffsetA > 0) ||
1415       (WidthB.isScalable() && OffsetB > 0))
1416     return true;
1417 
1418   int64_t OverlapA =
1419       KnownWidthA ? WidthA.getValue().getKnownMinValue() + OffsetA - MinOffset
1420                   : MemoryLocation::UnknownSize;
1421   int64_t OverlapB =
1422       KnownWidthB ? WidthB.getValue().getKnownMinValue() + OffsetB - MinOffset
1423                   : MemoryLocation::UnknownSize;
1424 
1425   LocationSize LocA = (WidthA.isScalable() || !KnownWidthA)
1426                           ? WidthA
1427                           : LocationSize::precise(OverlapA);
1428   LocationSize LocB = (WidthB.isScalable() || !KnownWidthB)
1429                           ? WidthB
1430                           : LocationSize::precise(OverlapB);
1431 
1432   return !AA->isNoAlias(
1433       MemoryLocation(ValA, LocA, UseTBAA ? MMOa->getAAInfo() : AAMDNodes()),
1434       MemoryLocation(ValB, LocB, UseTBAA ? MMOb->getAAInfo() : AAMDNodes()));
1435 }
1436 
1437 bool MachineInstr::mayAlias(AAResults *AA, const MachineInstr &Other,
1438                             bool UseTBAA) const {
1439   const MachineFunction *MF = getMF();
1440   const TargetInstrInfo *TII = MF->getSubtarget().getInstrInfo();
1441   const MachineFrameInfo &MFI = MF->getFrameInfo();
1442 
1443   // Exclude call instruction which may alter the memory but can not be handled
1444   // by this function.
1445   if (isCall() || Other.isCall())
1446     return true;
1447 
1448   // If neither instruction stores to memory, they can't alias in any
1449   // meaningful way, even if they read from the same address.
1450   if (!mayStore() && !Other.mayStore())
1451     return false;
1452 
1453   // Both instructions must be memory operations to be able to alias.
1454   if (!mayLoadOrStore() || !Other.mayLoadOrStore())
1455     return false;
1456 
1457   // Let the target decide if memory accesses cannot possibly overlap.
1458   if (TII->areMemAccessesTriviallyDisjoint(*this, Other))
1459     return false;
1460 
1461   // Memory operations without memory operands may access anything. Be
1462   // conservative and assume `MayAlias`.
1463   if (memoperands_empty() || Other.memoperands_empty())
1464     return true;
1465 
1466   // Skip if there are too many memory operands.
1467   auto NumChecks = getNumMemOperands() * Other.getNumMemOperands();
1468   if (NumChecks > TII->getMemOperandAACheckLimit())
1469     return true;
1470 
1471   // Check each pair of memory operands from both instructions, which can't
1472   // alias only if all pairs won't alias.
1473   for (auto *MMOa : memoperands())
1474     for (auto *MMOb : Other.memoperands())
1475       if (MemOperandsHaveAlias(MFI, AA, UseTBAA, MMOa, MMOb))
1476         return true;
1477 
1478   return false;
1479 }
1480 
1481 /// hasOrderedMemoryRef - Return true if this instruction may have an ordered
1482 /// or volatile memory reference, or if the information describing the memory
1483 /// reference is not available. Return false if it is known to have no ordered
1484 /// memory references.
1485 bool MachineInstr::hasOrderedMemoryRef() const {
1486   // An instruction known never to access memory won't have a volatile access.
1487   if (!mayStore() &&
1488       !mayLoad() &&
1489       !isCall() &&
1490       !hasUnmodeledSideEffects())
1491     return false;
1492 
1493   // Otherwise, if the instruction has no memory reference information,
1494   // conservatively assume it wasn't preserved.
1495   if (memoperands_empty())
1496     return true;
1497 
1498   // Check if any of our memory operands are ordered.
1499   return llvm::any_of(memoperands(), [](const MachineMemOperand *MMO) {
1500     return !MMO->isUnordered();
1501   });
1502 }
1503 
1504 /// isDereferenceableInvariantLoad - Return true if this instruction will never
1505 /// trap and is loading from a location whose value is invariant across a run of
1506 /// this function.
1507 bool MachineInstr::isDereferenceableInvariantLoad() const {
1508   // If the instruction doesn't load at all, it isn't an invariant load.
1509   if (!mayLoad())
1510     return false;
1511 
1512   // If the instruction has lost its memoperands, conservatively assume that
1513   // it may not be an invariant load.
1514   if (memoperands_empty())
1515     return false;
1516 
1517   const MachineFrameInfo &MFI = getParent()->getParent()->getFrameInfo();
1518 
1519   for (MachineMemOperand *MMO : memoperands()) {
1520     if (!MMO->isUnordered())
1521       // If the memory operand has ordering side effects, we can't move the
1522       // instruction.  Such an instruction is technically an invariant load,
1523       // but the caller code would need updated to expect that.
1524       return false;
1525     if (MMO->isStore()) return false;
1526     if (MMO->isInvariant() && MMO->isDereferenceable())
1527       continue;
1528 
1529     // A load from a constant PseudoSourceValue is invariant.
1530     if (const PseudoSourceValue *PSV = MMO->getPseudoValue()) {
1531       if (PSV->isConstant(&MFI))
1532         continue;
1533     }
1534 
1535     // Otherwise assume conservatively.
1536     return false;
1537   }
1538 
1539   // Everything checks out.
1540   return true;
1541 }
1542 
1543 Register MachineInstr::isConstantValuePHI() const {
1544   if (!isPHI())
1545     return {};
1546   assert(getNumOperands() >= 3 &&
1547          "It's illegal to have a PHI without source operands");
1548 
1549   Register Reg = getOperand(1).getReg();
1550   for (unsigned i = 3, e = getNumOperands(); i < e; i += 2)
1551     if (getOperand(i).getReg() != Reg)
1552       return {};
1553   return Reg;
1554 }
1555 
1556 bool MachineInstr::hasUnmodeledSideEffects() const {
1557   if (hasProperty(MCID::UnmodeledSideEffects))
1558     return true;
1559   if (isInlineAsm()) {
1560     unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm();
1561     if (ExtraInfo & InlineAsm::Extra_HasSideEffects)
1562       return true;
1563   }
1564 
1565   return false;
1566 }
1567 
1568 bool MachineInstr::isLoadFoldBarrier() const {
1569   return mayStore() || isCall() ||
1570          (hasUnmodeledSideEffects() && !isPseudoProbe());
1571 }
1572 
1573 /// allDefsAreDead - Return true if all the defs of this instruction are dead.
1574 ///
1575 bool MachineInstr::allDefsAreDead() const {
1576   for (const MachineOperand &MO : operands()) {
1577     if (!MO.isReg() || MO.isUse())
1578       continue;
1579     if (!MO.isDead())
1580       return false;
1581   }
1582   return true;
1583 }
1584 
1585 bool MachineInstr::allImplicitDefsAreDead() const {
1586   for (const MachineOperand &MO : implicit_operands()) {
1587     if (!MO.isReg() || MO.isUse())
1588       continue;
1589     if (!MO.isDead())
1590       return false;
1591   }
1592   return true;
1593 }
1594 
1595 /// copyImplicitOps - Copy implicit register operands from specified
1596 /// instruction to this instruction.
1597 void MachineInstr::copyImplicitOps(MachineFunction &MF,
1598                                    const MachineInstr &MI) {
1599   for (const MachineOperand &MO :
1600        llvm::drop_begin(MI.operands(), MI.getDesc().getNumOperands()))
1601     if ((MO.isReg() && MO.isImplicit()) || MO.isRegMask())
1602       addOperand(MF, MO);
1603 }
1604 
1605 bool MachineInstr::hasComplexRegisterTies() const {
1606   const MCInstrDesc &MCID = getDesc();
1607   if (MCID.Opcode == TargetOpcode::STATEPOINT)
1608     return true;
1609   for (unsigned I = 0, E = getNumOperands(); I < E; ++I) {
1610     const auto &Operand = getOperand(I);
1611     if (!Operand.isReg() || Operand.isDef())
1612       // Ignore the defined registers as MCID marks only the uses as tied.
1613       continue;
1614     int ExpectedTiedIdx = MCID.getOperandConstraint(I, MCOI::TIED_TO);
1615     int TiedIdx = Operand.isTied() ? int(findTiedOperandIdx(I)) : -1;
1616     if (ExpectedTiedIdx != TiedIdx)
1617       return true;
1618   }
1619   return false;
1620 }
1621 
1622 LLT MachineInstr::getTypeToPrint(unsigned OpIdx, SmallBitVector &PrintedTypes,
1623                                  const MachineRegisterInfo &MRI) const {
1624   const MachineOperand &Op = getOperand(OpIdx);
1625   if (!Op.isReg())
1626     return LLT{};
1627 
1628   if (isVariadic() || OpIdx >= getNumExplicitOperands())
1629     return MRI.getType(Op.getReg());
1630 
1631   auto &OpInfo = getDesc().operands()[OpIdx];
1632   if (!OpInfo.isGenericType())
1633     return MRI.getType(Op.getReg());
1634 
1635   if (PrintedTypes[OpInfo.getGenericTypeIndex()])
1636     return LLT{};
1637 
1638   LLT TypeToPrint = MRI.getType(Op.getReg());
1639   // Don't mark the type index printed if it wasn't actually printed: maybe
1640   // another operand with the same type index has an actual type attached:
1641   if (TypeToPrint.isValid())
1642     PrintedTypes.set(OpInfo.getGenericTypeIndex());
1643   return TypeToPrint;
1644 }
1645 
1646 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
1647 LLVM_DUMP_METHOD void MachineInstr::dump() const {
1648   dbgs() << "  ";
1649   print(dbgs());
1650 }
1651 
1652 LLVM_DUMP_METHOD void MachineInstr::dumprImpl(
1653     const MachineRegisterInfo &MRI, unsigned Depth, unsigned MaxDepth,
1654     SmallPtrSetImpl<const MachineInstr *> &AlreadySeenInstrs) const {
1655   if (Depth >= MaxDepth)
1656     return;
1657   if (!AlreadySeenInstrs.insert(this).second)
1658     return;
1659   // PadToColumn always inserts at least one space.
1660   // Don't mess up the alignment if we don't want any space.
1661   if (Depth)
1662     fdbgs().PadToColumn(Depth * 2);
1663   print(fdbgs());
1664   for (const MachineOperand &MO : operands()) {
1665     if (!MO.isReg() || MO.isDef())
1666       continue;
1667     Register Reg = MO.getReg();
1668     if (Reg.isPhysical())
1669       continue;
1670     const MachineInstr *NewMI = MRI.getUniqueVRegDef(Reg);
1671     if (NewMI == nullptr)
1672       continue;
1673     NewMI->dumprImpl(MRI, Depth + 1, MaxDepth, AlreadySeenInstrs);
1674   }
1675 }
1676 
1677 LLVM_DUMP_METHOD void MachineInstr::dumpr(const MachineRegisterInfo &MRI,
1678                                           unsigned MaxDepth) const {
1679   SmallPtrSet<const MachineInstr *, 16> AlreadySeenInstrs;
1680   dumprImpl(MRI, 0, MaxDepth, AlreadySeenInstrs);
1681 }
1682 #endif
1683 
1684 void MachineInstr::print(raw_ostream &OS, bool IsStandalone, bool SkipOpers,
1685                          bool SkipDebugLoc, bool AddNewLine,
1686                          const TargetInstrInfo *TII) const {
1687   const Module *M = nullptr;
1688   const Function *F = nullptr;
1689   if (const MachineFunction *MF = getMFIfAvailable(*this)) {
1690     F = &MF->getFunction();
1691     M = F->getParent();
1692     if (!TII)
1693       TII = MF->getSubtarget().getInstrInfo();
1694   }
1695 
1696   ModuleSlotTracker MST(M);
1697   if (F)
1698     MST.incorporateFunction(*F);
1699   print(OS, MST, IsStandalone, SkipOpers, SkipDebugLoc, AddNewLine, TII);
1700 }
1701 
1702 void MachineInstr::print(raw_ostream &OS, ModuleSlotTracker &MST,
1703                          bool IsStandalone, bool SkipOpers, bool SkipDebugLoc,
1704                          bool AddNewLine, const TargetInstrInfo *TII) const {
1705   // We can be a bit tidier if we know the MachineFunction.
1706   const TargetRegisterInfo *TRI = nullptr;
1707   const MachineRegisterInfo *MRI = nullptr;
1708   const TargetIntrinsicInfo *IntrinsicInfo = nullptr;
1709   tryToGetTargetInfo(*this, TRI, MRI, IntrinsicInfo, TII);
1710 
1711   if (isCFIInstruction())
1712     assert(getNumOperands() == 1 && "Expected 1 operand in CFI instruction");
1713 
1714   SmallBitVector PrintedTypes(8);
1715   bool ShouldPrintRegisterTies = IsStandalone || hasComplexRegisterTies();
1716   auto getTiedOperandIdx = [&](unsigned OpIdx) {
1717     if (!ShouldPrintRegisterTies)
1718       return 0U;
1719     const MachineOperand &MO = getOperand(OpIdx);
1720     if (MO.isReg() && MO.isTied() && !MO.isDef())
1721       return findTiedOperandIdx(OpIdx);
1722     return 0U;
1723   };
1724   unsigned StartOp = 0;
1725   unsigned e = getNumOperands();
1726 
1727   // Print explicitly defined operands on the left of an assignment syntax.
1728   while (StartOp < e) {
1729     const MachineOperand &MO = getOperand(StartOp);
1730     if (!MO.isReg() || !MO.isDef() || MO.isImplicit())
1731       break;
1732 
1733     if (StartOp != 0)
1734       OS << ", ";
1735 
1736     LLT TypeToPrint = MRI ? getTypeToPrint(StartOp, PrintedTypes, *MRI) : LLT{};
1737     unsigned TiedOperandIdx = getTiedOperandIdx(StartOp);
1738     MO.print(OS, MST, TypeToPrint, StartOp, /*PrintDef=*/false, IsStandalone,
1739              ShouldPrintRegisterTies, TiedOperandIdx, TRI, IntrinsicInfo);
1740     ++StartOp;
1741   }
1742 
1743   if (StartOp != 0)
1744     OS << " = ";
1745 
1746   if (getFlag(MachineInstr::FrameSetup))
1747     OS << "frame-setup ";
1748   if (getFlag(MachineInstr::FrameDestroy))
1749     OS << "frame-destroy ";
1750   if (getFlag(MachineInstr::FmNoNans))
1751     OS << "nnan ";
1752   if (getFlag(MachineInstr::FmNoInfs))
1753     OS << "ninf ";
1754   if (getFlag(MachineInstr::FmNsz))
1755     OS << "nsz ";
1756   if (getFlag(MachineInstr::FmArcp))
1757     OS << "arcp ";
1758   if (getFlag(MachineInstr::FmContract))
1759     OS << "contract ";
1760   if (getFlag(MachineInstr::FmAfn))
1761     OS << "afn ";
1762   if (getFlag(MachineInstr::FmReassoc))
1763     OS << "reassoc ";
1764   if (getFlag(MachineInstr::NoUWrap))
1765     OS << "nuw ";
1766   if (getFlag(MachineInstr::NoSWrap))
1767     OS << "nsw ";
1768   if (getFlag(MachineInstr::IsExact))
1769     OS << "exact ";
1770   if (getFlag(MachineInstr::NoFPExcept))
1771     OS << "nofpexcept ";
1772   if (getFlag(MachineInstr::NoMerge))
1773     OS << "nomerge ";
1774   if (getFlag(MachineInstr::NonNeg))
1775     OS << "nneg ";
1776   if (getFlag(MachineInstr::Disjoint))
1777     OS << "disjoint ";
1778   if (getFlag(MachineInstr::SameSign))
1779     OS << "samesign ";
1780 
1781   // Print the opcode name.
1782   if (TII)
1783     OS << TII->getName(getOpcode());
1784   else
1785     OS << "UNKNOWN";
1786 
1787   if (SkipOpers)
1788     return;
1789 
1790   // Print the rest of the operands.
1791   bool FirstOp = true;
1792   unsigned AsmDescOp = ~0u;
1793   unsigned AsmOpCount = 0;
1794 
1795   if (isInlineAsm() && e >= InlineAsm::MIOp_FirstOperand) {
1796     // Print asm string.
1797     OS << " ";
1798     const unsigned OpIdx = InlineAsm::MIOp_AsmString;
1799     LLT TypeToPrint = MRI ? getTypeToPrint(OpIdx, PrintedTypes, *MRI) : LLT{};
1800     unsigned TiedOperandIdx = getTiedOperandIdx(OpIdx);
1801     getOperand(OpIdx).print(OS, MST, TypeToPrint, OpIdx, /*PrintDef=*/true, IsStandalone,
1802                             ShouldPrintRegisterTies, TiedOperandIdx, TRI,
1803                             IntrinsicInfo);
1804 
1805     // Print HasSideEffects, MayLoad, MayStore, IsAlignStack
1806     unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm();
1807     if (ExtraInfo & InlineAsm::Extra_HasSideEffects)
1808       OS << " [sideeffect]";
1809     if (ExtraInfo & InlineAsm::Extra_MayLoad)
1810       OS << " [mayload]";
1811     if (ExtraInfo & InlineAsm::Extra_MayStore)
1812       OS << " [maystore]";
1813     if (ExtraInfo & InlineAsm::Extra_IsConvergent)
1814       OS << " [isconvergent]";
1815     if (ExtraInfo & InlineAsm::Extra_IsAlignStack)
1816       OS << " [alignstack]";
1817     if (getInlineAsmDialect() == InlineAsm::AD_ATT)
1818       OS << " [attdialect]";
1819     if (getInlineAsmDialect() == InlineAsm::AD_Intel)
1820       OS << " [inteldialect]";
1821 
1822     StartOp = AsmDescOp = InlineAsm::MIOp_FirstOperand;
1823     FirstOp = false;
1824   }
1825 
1826   for (unsigned i = StartOp, e = getNumOperands(); i != e; ++i) {
1827     const MachineOperand &MO = getOperand(i);
1828 
1829     if (FirstOp) FirstOp = false; else OS << ",";
1830     OS << " ";
1831 
1832     if (isDebugValueLike() && MO.isMetadata()) {
1833       // Pretty print DBG_VALUE* instructions.
1834       auto *DIV = dyn_cast<DILocalVariable>(MO.getMetadata());
1835       if (DIV && !DIV->getName().empty())
1836         OS << "!\"" << DIV->getName() << '\"';
1837       else {
1838         LLT TypeToPrint = MRI ? getTypeToPrint(i, PrintedTypes, *MRI) : LLT{};
1839         unsigned TiedOperandIdx = getTiedOperandIdx(i);
1840         MO.print(OS, MST, TypeToPrint, i, /*PrintDef=*/true, IsStandalone,
1841                  ShouldPrintRegisterTies, TiedOperandIdx, TRI, IntrinsicInfo);
1842       }
1843     } else if (isDebugLabel() && MO.isMetadata()) {
1844       // Pretty print DBG_LABEL instructions.
1845       auto *DIL = dyn_cast<DILabel>(MO.getMetadata());
1846       if (DIL && !DIL->getName().empty())
1847         OS << "\"" << DIL->getName() << '\"';
1848       else {
1849         LLT TypeToPrint = MRI ? getTypeToPrint(i, PrintedTypes, *MRI) : LLT{};
1850         unsigned TiedOperandIdx = getTiedOperandIdx(i);
1851         MO.print(OS, MST, TypeToPrint, i, /*PrintDef=*/true, IsStandalone,
1852                  ShouldPrintRegisterTies, TiedOperandIdx, TRI, IntrinsicInfo);
1853       }
1854     } else if (i == AsmDescOp && MO.isImm()) {
1855       // Pretty print the inline asm operand descriptor.
1856       OS << '$' << AsmOpCount++;
1857       unsigned Flag = MO.getImm();
1858       const InlineAsm::Flag F(Flag);
1859       OS << ":[";
1860       OS << F.getKindName();
1861 
1862       unsigned RCID;
1863       if (!F.isImmKind() && !F.isMemKind() && F.hasRegClassConstraint(RCID)) {
1864         if (TRI) {
1865           OS << ':' << TRI->getRegClassName(TRI->getRegClass(RCID));
1866         } else
1867           OS << ":RC" << RCID;
1868       }
1869 
1870       if (F.isMemKind()) {
1871         const InlineAsm::ConstraintCode MCID = F.getMemoryConstraintID();
1872         OS << ":" << InlineAsm::getMemConstraintName(MCID);
1873       }
1874 
1875       unsigned TiedTo;
1876       if (F.isUseOperandTiedToDef(TiedTo))
1877         OS << " tiedto:$" << TiedTo;
1878 
1879       if ((F.isRegDefKind() || F.isRegDefEarlyClobberKind() ||
1880            F.isRegUseKind()) &&
1881           F.getRegMayBeFolded()) {
1882         OS << " foldable";
1883       }
1884 
1885       OS << ']';
1886 
1887       // Compute the index of the next operand descriptor.
1888       AsmDescOp += 1 + F.getNumOperandRegisters();
1889     } else {
1890       LLT TypeToPrint = MRI ? getTypeToPrint(i, PrintedTypes, *MRI) : LLT{};
1891       unsigned TiedOperandIdx = getTiedOperandIdx(i);
1892       if (MO.isImm() && isOperandSubregIdx(i))
1893         MachineOperand::printSubRegIdx(OS, MO.getImm(), TRI);
1894       else
1895         MO.print(OS, MST, TypeToPrint, i, /*PrintDef=*/true, IsStandalone,
1896                  ShouldPrintRegisterTies, TiedOperandIdx, TRI, IntrinsicInfo);
1897     }
1898   }
1899 
1900   // Print any optional symbols attached to this instruction as-if they were
1901   // operands.
1902   if (MCSymbol *PreInstrSymbol = getPreInstrSymbol()) {
1903     if (!FirstOp) {
1904       FirstOp = false;
1905       OS << ',';
1906     }
1907     OS << " pre-instr-symbol ";
1908     MachineOperand::printSymbol(OS, *PreInstrSymbol);
1909   }
1910   if (MCSymbol *PostInstrSymbol = getPostInstrSymbol()) {
1911     if (!FirstOp) {
1912       FirstOp = false;
1913       OS << ',';
1914     }
1915     OS << " post-instr-symbol ";
1916     MachineOperand::printSymbol(OS, *PostInstrSymbol);
1917   }
1918   if (MDNode *HeapAllocMarker = getHeapAllocMarker()) {
1919     if (!FirstOp) {
1920       FirstOp = false;
1921       OS << ',';
1922     }
1923     OS << " heap-alloc-marker ";
1924     HeapAllocMarker->printAsOperand(OS, MST);
1925   }
1926   if (MDNode *PCSections = getPCSections()) {
1927     if (!FirstOp) {
1928       FirstOp = false;
1929       OS << ',';
1930     }
1931     OS << " pcsections ";
1932     PCSections->printAsOperand(OS, MST);
1933   }
1934   if (MDNode *MMRA = getMMRAMetadata()) {
1935     if (!FirstOp) {
1936       FirstOp = false;
1937       OS << ',';
1938     }
1939     OS << " mmra ";
1940     MMRA->printAsOperand(OS, MST);
1941   }
1942   if (uint32_t CFIType = getCFIType()) {
1943     if (!FirstOp)
1944       OS << ',';
1945     OS << " cfi-type " << CFIType;
1946   }
1947 
1948   if (DebugInstrNum) {
1949     if (!FirstOp)
1950       OS << ",";
1951     OS << " debug-instr-number " << DebugInstrNum;
1952   }
1953 
1954   if (!SkipDebugLoc) {
1955     if (const DebugLoc &DL = getDebugLoc()) {
1956       if (!FirstOp)
1957         OS << ',';
1958       OS << " debug-location ";
1959       DL->printAsOperand(OS, MST);
1960     }
1961   }
1962 
1963   if (!memoperands_empty()) {
1964     SmallVector<StringRef, 0> SSNs;
1965     const LLVMContext *Context = nullptr;
1966     std::unique_ptr<LLVMContext> CtxPtr;
1967     const MachineFrameInfo *MFI = nullptr;
1968     if (const MachineFunction *MF = getMFIfAvailable(*this)) {
1969       MFI = &MF->getFrameInfo();
1970       Context = &MF->getFunction().getContext();
1971     } else {
1972       CtxPtr = std::make_unique<LLVMContext>();
1973       Context = CtxPtr.get();
1974     }
1975 
1976     OS << " :: ";
1977     bool NeedComma = false;
1978     for (const MachineMemOperand *Op : memoperands()) {
1979       if (NeedComma)
1980         OS << ", ";
1981       Op->print(OS, MST, SSNs, *Context, MFI, TII);
1982       NeedComma = true;
1983     }
1984   }
1985 
1986   if (SkipDebugLoc)
1987     return;
1988 
1989   bool HaveSemi = false;
1990 
1991   // Print debug location information.
1992   if (const DebugLoc &DL = getDebugLoc()) {
1993     if (!HaveSemi) {
1994       OS << ';';
1995       HaveSemi = true;
1996     }
1997     OS << ' ';
1998     DL.print(OS);
1999   }
2000 
2001   // Print extra comments for DEBUG_VALUE and friends if they are well-formed.
2002   if ((isNonListDebugValue() && getNumOperands() >= 4) ||
2003       (isDebugValueList() && getNumOperands() >= 2) ||
2004       (isDebugRef() && getNumOperands() >= 3)) {
2005     if (getDebugVariableOp().isMetadata()) {
2006       if (!HaveSemi) {
2007         OS << ";";
2008         HaveSemi = true;
2009       }
2010       auto *DV = getDebugVariable();
2011       OS << " line no:" << DV->getLine();
2012       if (isIndirectDebugValue())
2013         OS << " indirect";
2014     }
2015   }
2016   // TODO: DBG_LABEL
2017 
2018   if (AddNewLine)
2019     OS << '\n';
2020 }
2021 
2022 bool MachineInstr::addRegisterKilled(Register IncomingReg,
2023                                      const TargetRegisterInfo *RegInfo,
2024                                      bool AddIfNotFound) {
2025   bool isPhysReg = IncomingReg.isPhysical();
2026   bool hasAliases = isPhysReg &&
2027     MCRegAliasIterator(IncomingReg, RegInfo, false).isValid();
2028   bool Found = false;
2029   SmallVector<unsigned,4> DeadOps;
2030   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
2031     MachineOperand &MO = getOperand(i);
2032     if (!MO.isReg() || !MO.isUse() || MO.isUndef())
2033       continue;
2034 
2035     // DEBUG_VALUE nodes do not contribute to code generation and should
2036     // always be ignored. Failure to do so may result in trying to modify
2037     // KILL flags on DEBUG_VALUE nodes.
2038     if (MO.isDebug())
2039       continue;
2040 
2041     Register Reg = MO.getReg();
2042     if (!Reg)
2043       continue;
2044 
2045     if (Reg == IncomingReg) {
2046       if (!Found) {
2047         if (MO.isKill())
2048           // The register is already marked kill.
2049           return true;
2050         if (isPhysReg && isRegTiedToDefOperand(i))
2051           // Two-address uses of physregs must not be marked kill.
2052           return true;
2053         MO.setIsKill();
2054         Found = true;
2055       }
2056     } else if (hasAliases && MO.isKill() && Reg.isPhysical()) {
2057       // A super-register kill already exists.
2058       if (RegInfo->isSuperRegister(IncomingReg, Reg))
2059         return true;
2060       if (RegInfo->isSubRegister(IncomingReg, Reg))
2061         DeadOps.push_back(i);
2062     }
2063   }
2064 
2065   // Trim unneeded kill operands.
2066   while (!DeadOps.empty()) {
2067     unsigned OpIdx = DeadOps.back();
2068     if (getOperand(OpIdx).isImplicit() &&
2069         (!isInlineAsm() || findInlineAsmFlagIdx(OpIdx) < 0))
2070       removeOperand(OpIdx);
2071     else
2072       getOperand(OpIdx).setIsKill(false);
2073     DeadOps.pop_back();
2074   }
2075 
2076   // If not found, this means an alias of one of the operands is killed. Add a
2077   // new implicit operand if required.
2078   if (!Found && AddIfNotFound) {
2079     addOperand(MachineOperand::CreateReg(IncomingReg,
2080                                          false /*IsDef*/,
2081                                          true  /*IsImp*/,
2082                                          true  /*IsKill*/));
2083     return true;
2084   }
2085   return Found;
2086 }
2087 
2088 void MachineInstr::clearRegisterKills(Register Reg,
2089                                       const TargetRegisterInfo *RegInfo) {
2090   if (!Reg.isPhysical())
2091     RegInfo = nullptr;
2092   for (MachineOperand &MO : operands()) {
2093     if (!MO.isReg() || !MO.isUse() || !MO.isKill())
2094       continue;
2095     Register OpReg = MO.getReg();
2096     if ((RegInfo && RegInfo->regsOverlap(Reg, OpReg)) || Reg == OpReg)
2097       MO.setIsKill(false);
2098   }
2099 }
2100 
2101 bool MachineInstr::addRegisterDead(Register Reg,
2102                                    const TargetRegisterInfo *RegInfo,
2103                                    bool AddIfNotFound) {
2104   bool isPhysReg = Reg.isPhysical();
2105   bool hasAliases = isPhysReg &&
2106     MCRegAliasIterator(Reg, RegInfo, false).isValid();
2107   bool Found = false;
2108   SmallVector<unsigned,4> DeadOps;
2109   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
2110     MachineOperand &MO = getOperand(i);
2111     if (!MO.isReg() || !MO.isDef())
2112       continue;
2113     Register MOReg = MO.getReg();
2114     if (!MOReg)
2115       continue;
2116 
2117     if (MOReg == Reg) {
2118       MO.setIsDead();
2119       Found = true;
2120     } else if (hasAliases && MO.isDead() && MOReg.isPhysical()) {
2121       // There exists a super-register that's marked dead.
2122       if (RegInfo->isSuperRegister(Reg, MOReg))
2123         return true;
2124       if (RegInfo->isSubRegister(Reg, MOReg))
2125         DeadOps.push_back(i);
2126     }
2127   }
2128 
2129   // Trim unneeded dead operands.
2130   while (!DeadOps.empty()) {
2131     unsigned OpIdx = DeadOps.back();
2132     if (getOperand(OpIdx).isImplicit() &&
2133         (!isInlineAsm() || findInlineAsmFlagIdx(OpIdx) < 0))
2134       removeOperand(OpIdx);
2135     else
2136       getOperand(OpIdx).setIsDead(false);
2137     DeadOps.pop_back();
2138   }
2139 
2140   // If not found, this means an alias of one of the operands is dead. Add a
2141   // new implicit operand if required.
2142   if (Found || !AddIfNotFound)
2143     return Found;
2144 
2145   addOperand(MachineOperand::CreateReg(Reg,
2146                                        true  /*IsDef*/,
2147                                        true  /*IsImp*/,
2148                                        false /*IsKill*/,
2149                                        true  /*IsDead*/));
2150   return true;
2151 }
2152 
2153 void MachineInstr::clearRegisterDeads(Register Reg) {
2154   for (MachineOperand &MO : all_defs())
2155     if (MO.getReg() == Reg)
2156       MO.setIsDead(false);
2157 }
2158 
2159 void MachineInstr::setRegisterDefReadUndef(Register Reg, bool IsUndef) {
2160   for (MachineOperand &MO : all_defs())
2161     if (MO.getReg() == Reg && MO.getSubReg() != 0)
2162       MO.setIsUndef(IsUndef);
2163 }
2164 
2165 void MachineInstr::addRegisterDefined(Register Reg,
2166                                       const TargetRegisterInfo *RegInfo) {
2167   if (Reg.isPhysical()) {
2168     MachineOperand *MO = findRegisterDefOperand(Reg, RegInfo, false, false);
2169     if (MO)
2170       return;
2171   } else {
2172     for (const MachineOperand &MO : all_defs()) {
2173       if (MO.getReg() == Reg && MO.getSubReg() == 0)
2174         return;
2175     }
2176   }
2177   addOperand(MachineOperand::CreateReg(Reg,
2178                                        true  /*IsDef*/,
2179                                        true  /*IsImp*/));
2180 }
2181 
2182 void MachineInstr::setPhysRegsDeadExcept(ArrayRef<Register> UsedRegs,
2183                                          const TargetRegisterInfo &TRI) {
2184   bool HasRegMask = false;
2185   for (MachineOperand &MO : operands()) {
2186     if (MO.isRegMask()) {
2187       HasRegMask = true;
2188       continue;
2189     }
2190     if (!MO.isReg() || !MO.isDef()) continue;
2191     Register Reg = MO.getReg();
2192     if (!Reg.isPhysical())
2193       continue;
2194     // If there are no uses, including partial uses, the def is dead.
2195     if (llvm::none_of(UsedRegs,
2196                       [&](MCRegister Use) { return TRI.regsOverlap(Use, Reg); }))
2197       MO.setIsDead();
2198   }
2199 
2200   // This is a call with a register mask operand.
2201   // Mask clobbers are always dead, so add defs for the non-dead defines.
2202   if (HasRegMask)
2203     for (const Register &UsedReg : UsedRegs)
2204       addRegisterDefined(UsedReg, &TRI);
2205 }
2206 
2207 unsigned
2208 MachineInstrExpressionTrait::getHashValue(const MachineInstr* const &MI) {
2209   // Build up a buffer of hash code components.
2210   SmallVector<size_t, 16> HashComponents;
2211   HashComponents.reserve(MI->getNumOperands() + 1);
2212   HashComponents.push_back(MI->getOpcode());
2213   for (const MachineOperand &MO : MI->operands()) {
2214     if (MO.isReg() && MO.isDef() && MO.getReg().isVirtual())
2215       continue;  // Skip virtual register defs.
2216 
2217     HashComponents.push_back(hash_value(MO));
2218   }
2219   return hash_combine_range(HashComponents.begin(), HashComponents.end());
2220 }
2221 
2222 void MachineInstr::emitError(StringRef Msg) const {
2223   // Find the source location cookie.
2224   uint64_t LocCookie = 0;
2225   const MDNode *LocMD = nullptr;
2226   for (unsigned i = getNumOperands(); i != 0; --i) {
2227     if (getOperand(i-1).isMetadata() &&
2228         (LocMD = getOperand(i-1).getMetadata()) &&
2229         LocMD->getNumOperands() != 0) {
2230       if (const ConstantInt *CI =
2231               mdconst::dyn_extract<ConstantInt>(LocMD->getOperand(0))) {
2232         LocCookie = CI->getZExtValue();
2233         break;
2234       }
2235     }
2236   }
2237 
2238   if (const MachineBasicBlock *MBB = getParent())
2239     if (const MachineFunction *MF = MBB->getParent())
2240       return MF->getFunction().getContext().emitError(LocCookie, Msg);
2241   report_fatal_error(Msg);
2242 }
2243 
2244 MachineInstrBuilder llvm::BuildMI(MachineFunction &MF, const DebugLoc &DL,
2245                                   const MCInstrDesc &MCID, bool IsIndirect,
2246                                   Register Reg, const MDNode *Variable,
2247                                   const MDNode *Expr) {
2248   assert(isa<DILocalVariable>(Variable) && "not a variable");
2249   assert(cast<DIExpression>(Expr)->isValid() && "not an expression");
2250   assert(cast<DILocalVariable>(Variable)->isValidLocationForIntrinsic(DL) &&
2251          "Expected inlined-at fields to agree");
2252   auto MIB = BuildMI(MF, DL, MCID).addReg(Reg);
2253   if (IsIndirect)
2254     MIB.addImm(0U);
2255   else
2256     MIB.addReg(0U);
2257   return MIB.addMetadata(Variable).addMetadata(Expr);
2258 }
2259 
2260 MachineInstrBuilder llvm::BuildMI(MachineFunction &MF, const DebugLoc &DL,
2261                                   const MCInstrDesc &MCID, bool IsIndirect,
2262                                   ArrayRef<MachineOperand> DebugOps,
2263                                   const MDNode *Variable, const MDNode *Expr) {
2264   assert(isa<DILocalVariable>(Variable) && "not a variable");
2265   assert(cast<DIExpression>(Expr)->isValid() && "not an expression");
2266   assert(cast<DILocalVariable>(Variable)->isValidLocationForIntrinsic(DL) &&
2267          "Expected inlined-at fields to agree");
2268   if (MCID.Opcode == TargetOpcode::DBG_VALUE) {
2269     assert(DebugOps.size() == 1 &&
2270            "DBG_VALUE must contain exactly one debug operand");
2271     MachineOperand DebugOp = DebugOps[0];
2272     if (DebugOp.isReg())
2273       return BuildMI(MF, DL, MCID, IsIndirect, DebugOp.getReg(), Variable,
2274                      Expr);
2275 
2276     auto MIB = BuildMI(MF, DL, MCID).add(DebugOp);
2277     if (IsIndirect)
2278       MIB.addImm(0U);
2279     else
2280       MIB.addReg(0U);
2281     return MIB.addMetadata(Variable).addMetadata(Expr);
2282   }
2283 
2284   auto MIB = BuildMI(MF, DL, MCID);
2285   MIB.addMetadata(Variable).addMetadata(Expr);
2286   for (const MachineOperand &DebugOp : DebugOps)
2287     if (DebugOp.isReg())
2288       MIB.addReg(DebugOp.getReg());
2289     else
2290       MIB.add(DebugOp);
2291   return MIB;
2292 }
2293 
2294 MachineInstrBuilder llvm::BuildMI(MachineBasicBlock &BB,
2295                                   MachineBasicBlock::iterator I,
2296                                   const DebugLoc &DL, const MCInstrDesc &MCID,
2297                                   bool IsIndirect, Register Reg,
2298                                   const MDNode *Variable, const MDNode *Expr) {
2299   MachineFunction &MF = *BB.getParent();
2300   MachineInstr *MI = BuildMI(MF, DL, MCID, IsIndirect, Reg, Variable, Expr);
2301   BB.insert(I, MI);
2302   return MachineInstrBuilder(MF, MI);
2303 }
2304 
2305 MachineInstrBuilder llvm::BuildMI(MachineBasicBlock &BB,
2306                                   MachineBasicBlock::iterator I,
2307                                   const DebugLoc &DL, const MCInstrDesc &MCID,
2308                                   bool IsIndirect,
2309                                   ArrayRef<MachineOperand> DebugOps,
2310                                   const MDNode *Variable, const MDNode *Expr) {
2311   MachineFunction &MF = *BB.getParent();
2312   MachineInstr *MI =
2313       BuildMI(MF, DL, MCID, IsIndirect, DebugOps, Variable, Expr);
2314   BB.insert(I, MI);
2315   return MachineInstrBuilder(MF, *MI);
2316 }
2317 
2318 /// Compute the new DIExpression to use with a DBG_VALUE for a spill slot.
2319 /// This prepends DW_OP_deref when spilling an indirect DBG_VALUE.
2320 static const DIExpression *computeExprForSpill(
2321     const MachineInstr &MI,
2322     const SmallVectorImpl<const MachineOperand *> &SpilledOperands) {
2323   assert(MI.getDebugVariable()->isValidLocationForIntrinsic(MI.getDebugLoc()) &&
2324          "Expected inlined-at fields to agree");
2325 
2326   const DIExpression *Expr = MI.getDebugExpression();
2327   if (MI.isIndirectDebugValue()) {
2328     assert(MI.getDebugOffset().getImm() == 0 &&
2329            "DBG_VALUE with nonzero offset");
2330     Expr = DIExpression::prepend(Expr, DIExpression::DerefBefore);
2331   } else if (MI.isDebugValueList()) {
2332     // We will replace the spilled register with a frame index, so
2333     // immediately deref all references to the spilled register.
2334     std::array<uint64_t, 1> Ops{{dwarf::DW_OP_deref}};
2335     for (const MachineOperand *Op : SpilledOperands) {
2336       unsigned OpIdx = MI.getDebugOperandIndex(Op);
2337       Expr = DIExpression::appendOpsToArg(Expr, Ops, OpIdx);
2338     }
2339   }
2340   return Expr;
2341 }
2342 static const DIExpression *computeExprForSpill(const MachineInstr &MI,
2343                                                Register SpillReg) {
2344   assert(MI.hasDebugOperandForReg(SpillReg) && "Spill Reg is not used in MI.");
2345   SmallVector<const MachineOperand *> SpillOperands;
2346   for (const MachineOperand &Op : MI.getDebugOperandsForReg(SpillReg))
2347     SpillOperands.push_back(&Op);
2348   return computeExprForSpill(MI, SpillOperands);
2349 }
2350 
2351 MachineInstr *llvm::buildDbgValueForSpill(MachineBasicBlock &BB,
2352                                           MachineBasicBlock::iterator I,
2353                                           const MachineInstr &Orig,
2354                                           int FrameIndex, Register SpillReg) {
2355   assert(!Orig.isDebugRef() &&
2356          "DBG_INSTR_REF should not reference a virtual register.");
2357   const DIExpression *Expr = computeExprForSpill(Orig, SpillReg);
2358   MachineInstrBuilder NewMI =
2359       BuildMI(BB, I, Orig.getDebugLoc(), Orig.getDesc());
2360   // Non-Variadic Operands: Location, Offset, Variable, Expression
2361   // Variadic Operands:     Variable, Expression, Locations...
2362   if (Orig.isNonListDebugValue())
2363     NewMI.addFrameIndex(FrameIndex).addImm(0U);
2364   NewMI.addMetadata(Orig.getDebugVariable()).addMetadata(Expr);
2365   if (Orig.isDebugValueList()) {
2366     for (const MachineOperand &Op : Orig.debug_operands())
2367       if (Op.isReg() && Op.getReg() == SpillReg)
2368         NewMI.addFrameIndex(FrameIndex);
2369       else
2370         NewMI.add(MachineOperand(Op));
2371   }
2372   return NewMI;
2373 }
2374 MachineInstr *llvm::buildDbgValueForSpill(
2375     MachineBasicBlock &BB, MachineBasicBlock::iterator I,
2376     const MachineInstr &Orig, int FrameIndex,
2377     const SmallVectorImpl<const MachineOperand *> &SpilledOperands) {
2378   const DIExpression *Expr = computeExprForSpill(Orig, SpilledOperands);
2379   MachineInstrBuilder NewMI =
2380       BuildMI(BB, I, Orig.getDebugLoc(), Orig.getDesc());
2381   // Non-Variadic Operands: Location, Offset, Variable, Expression
2382   // Variadic Operands:     Variable, Expression, Locations...
2383   if (Orig.isNonListDebugValue())
2384     NewMI.addFrameIndex(FrameIndex).addImm(0U);
2385   NewMI.addMetadata(Orig.getDebugVariable()).addMetadata(Expr);
2386   if (Orig.isDebugValueList()) {
2387     for (const MachineOperand &Op : Orig.debug_operands())
2388       if (is_contained(SpilledOperands, &Op))
2389         NewMI.addFrameIndex(FrameIndex);
2390       else
2391         NewMI.add(MachineOperand(Op));
2392   }
2393   return NewMI;
2394 }
2395 
2396 void llvm::updateDbgValueForSpill(MachineInstr &Orig, int FrameIndex,
2397                                   Register Reg) {
2398   const DIExpression *Expr = computeExprForSpill(Orig, Reg);
2399   if (Orig.isNonListDebugValue())
2400     Orig.getDebugOffset().ChangeToImmediate(0U);
2401   for (MachineOperand &Op : Orig.getDebugOperandsForReg(Reg))
2402     Op.ChangeToFrameIndex(FrameIndex);
2403   Orig.getDebugExpressionOp().setMetadata(Expr);
2404 }
2405 
2406 void MachineInstr::collectDebugValues(
2407                                 SmallVectorImpl<MachineInstr *> &DbgValues) {
2408   MachineInstr &MI = *this;
2409   if (!MI.getOperand(0).isReg())
2410     return;
2411 
2412   MachineBasicBlock::iterator DI = MI; ++DI;
2413   for (MachineBasicBlock::iterator DE = MI.getParent()->end();
2414        DI != DE; ++DI) {
2415     if (!DI->isDebugValue())
2416       return;
2417     if (DI->hasDebugOperandForReg(MI.getOperand(0).getReg()))
2418       DbgValues.push_back(&*DI);
2419   }
2420 }
2421 
2422 void MachineInstr::changeDebugValuesDefReg(Register Reg) {
2423   // Collect matching debug values.
2424   SmallVector<MachineInstr *, 2> DbgValues;
2425 
2426   if (!getOperand(0).isReg())
2427     return;
2428 
2429   Register DefReg = getOperand(0).getReg();
2430   auto *MRI = getRegInfo();
2431   for (auto &MO : MRI->use_operands(DefReg)) {
2432     auto *DI = MO.getParent();
2433     if (!DI->isDebugValue())
2434       continue;
2435     if (DI->hasDebugOperandForReg(DefReg)) {
2436       DbgValues.push_back(DI);
2437     }
2438   }
2439 
2440   // Propagate Reg to debug value instructions.
2441   for (auto *DBI : DbgValues)
2442     for (MachineOperand &Op : DBI->getDebugOperandsForReg(DefReg))
2443       Op.setReg(Reg);
2444 }
2445 
2446 using MMOList = SmallVector<const MachineMemOperand *, 2>;
2447 
2448 static LocationSize getSpillSlotSize(const MMOList &Accesses,
2449                                      const MachineFrameInfo &MFI) {
2450   uint64_t Size = 0;
2451   for (const auto *A : Accesses) {
2452     if (MFI.isSpillSlotObjectIndex(
2453             cast<FixedStackPseudoSourceValue>(A->getPseudoValue())
2454                 ->getFrameIndex())) {
2455       LocationSize S = A->getSize();
2456       if (!S.hasValue())
2457         return LocationSize::beforeOrAfterPointer();
2458       Size += S.getValue();
2459     }
2460   }
2461   return Size;
2462 }
2463 
2464 std::optional<LocationSize>
2465 MachineInstr::getSpillSize(const TargetInstrInfo *TII) const {
2466   int FI;
2467   if (TII->isStoreToStackSlotPostFE(*this, FI)) {
2468     const MachineFrameInfo &MFI = getMF()->getFrameInfo();
2469     if (MFI.isSpillSlotObjectIndex(FI))
2470       return (*memoperands_begin())->getSize();
2471   }
2472   return std::nullopt;
2473 }
2474 
2475 std::optional<LocationSize>
2476 MachineInstr::getFoldedSpillSize(const TargetInstrInfo *TII) const {
2477   MMOList Accesses;
2478   if (TII->hasStoreToStackSlot(*this, Accesses))
2479     return getSpillSlotSize(Accesses, getMF()->getFrameInfo());
2480   return std::nullopt;
2481 }
2482 
2483 std::optional<LocationSize>
2484 MachineInstr::getRestoreSize(const TargetInstrInfo *TII) const {
2485   int FI;
2486   if (TII->isLoadFromStackSlotPostFE(*this, FI)) {
2487     const MachineFrameInfo &MFI = getMF()->getFrameInfo();
2488     if (MFI.isSpillSlotObjectIndex(FI))
2489       return (*memoperands_begin())->getSize();
2490   }
2491   return std::nullopt;
2492 }
2493 
2494 std::optional<LocationSize>
2495 MachineInstr::getFoldedRestoreSize(const TargetInstrInfo *TII) const {
2496   MMOList Accesses;
2497   if (TII->hasLoadFromStackSlot(*this, Accesses))
2498     return getSpillSlotSize(Accesses, getMF()->getFrameInfo());
2499   return std::nullopt;
2500 }
2501 
2502 unsigned MachineInstr::getDebugInstrNum() {
2503   if (DebugInstrNum == 0)
2504     DebugInstrNum = getParent()->getParent()->getNewDebugInstrNum();
2505   return DebugInstrNum;
2506 }
2507 
2508 unsigned MachineInstr::getDebugInstrNum(MachineFunction &MF) {
2509   if (DebugInstrNum == 0)
2510     DebugInstrNum = MF.getNewDebugInstrNum();
2511   return DebugInstrNum;
2512 }
2513 
2514 std::tuple<LLT, LLT> MachineInstr::getFirst2LLTs() const {
2515   return std::tuple(getRegInfo()->getType(getOperand(0).getReg()),
2516                     getRegInfo()->getType(getOperand(1).getReg()));
2517 }
2518 
2519 std::tuple<LLT, LLT, LLT> MachineInstr::getFirst3LLTs() const {
2520   return std::tuple(getRegInfo()->getType(getOperand(0).getReg()),
2521                     getRegInfo()->getType(getOperand(1).getReg()),
2522                     getRegInfo()->getType(getOperand(2).getReg()));
2523 }
2524 
2525 std::tuple<LLT, LLT, LLT, LLT> MachineInstr::getFirst4LLTs() const {
2526   return std::tuple(getRegInfo()->getType(getOperand(0).getReg()),
2527                     getRegInfo()->getType(getOperand(1).getReg()),
2528                     getRegInfo()->getType(getOperand(2).getReg()),
2529                     getRegInfo()->getType(getOperand(3).getReg()));
2530 }
2531 
2532 std::tuple<LLT, LLT, LLT, LLT, LLT> MachineInstr::getFirst5LLTs() const {
2533   return std::tuple(getRegInfo()->getType(getOperand(0).getReg()),
2534                     getRegInfo()->getType(getOperand(1).getReg()),
2535                     getRegInfo()->getType(getOperand(2).getReg()),
2536                     getRegInfo()->getType(getOperand(3).getReg()),
2537                     getRegInfo()->getType(getOperand(4).getReg()));
2538 }
2539 
2540 std::tuple<Register, LLT, Register, LLT>
2541 MachineInstr::getFirst2RegLLTs() const {
2542   Register Reg0 = getOperand(0).getReg();
2543   Register Reg1 = getOperand(1).getReg();
2544   return std::tuple(Reg0, getRegInfo()->getType(Reg0), Reg1,
2545                     getRegInfo()->getType(Reg1));
2546 }
2547 
2548 std::tuple<Register, LLT, Register, LLT, Register, LLT>
2549 MachineInstr::getFirst3RegLLTs() const {
2550   Register Reg0 = getOperand(0).getReg();
2551   Register Reg1 = getOperand(1).getReg();
2552   Register Reg2 = getOperand(2).getReg();
2553   return std::tuple(Reg0, getRegInfo()->getType(Reg0), Reg1,
2554                     getRegInfo()->getType(Reg1), Reg2,
2555                     getRegInfo()->getType(Reg2));
2556 }
2557 
2558 std::tuple<Register, LLT, Register, LLT, Register, LLT, Register, LLT>
2559 MachineInstr::getFirst4RegLLTs() const {
2560   Register Reg0 = getOperand(0).getReg();
2561   Register Reg1 = getOperand(1).getReg();
2562   Register Reg2 = getOperand(2).getReg();
2563   Register Reg3 = getOperand(3).getReg();
2564   return std::tuple(
2565       Reg0, getRegInfo()->getType(Reg0), Reg1, getRegInfo()->getType(Reg1),
2566       Reg2, getRegInfo()->getType(Reg2), Reg3, getRegInfo()->getType(Reg3));
2567 }
2568 
2569 std::tuple<Register, LLT, Register, LLT, Register, LLT, Register, LLT, Register,
2570            LLT>
2571 MachineInstr::getFirst5RegLLTs() const {
2572   Register Reg0 = getOperand(0).getReg();
2573   Register Reg1 = getOperand(1).getReg();
2574   Register Reg2 = getOperand(2).getReg();
2575   Register Reg3 = getOperand(3).getReg();
2576   Register Reg4 = getOperand(4).getReg();
2577   return std::tuple(
2578       Reg0, getRegInfo()->getType(Reg0), Reg1, getRegInfo()->getType(Reg1),
2579       Reg2, getRegInfo()->getType(Reg2), Reg3, getRegInfo()->getType(Reg3),
2580       Reg4, getRegInfo()->getType(Reg4));
2581 }
2582 
2583 void MachineInstr::insert(mop_iterator InsertBefore,
2584                           ArrayRef<MachineOperand> Ops) {
2585   assert(InsertBefore != nullptr && "invalid iterator");
2586   assert(InsertBefore->getParent() == this &&
2587          "iterator points to operand of other inst");
2588   if (Ops.empty())
2589     return;
2590 
2591   // Do one pass to untie operands.
2592   SmallDenseMap<unsigned, unsigned> TiedOpIndices;
2593   for (const MachineOperand &MO : operands()) {
2594     if (MO.isReg() && MO.isTied()) {
2595       unsigned OpNo = getOperandNo(&MO);
2596       unsigned TiedTo = findTiedOperandIdx(OpNo);
2597       TiedOpIndices[OpNo] = TiedTo;
2598       untieRegOperand(OpNo);
2599     }
2600   }
2601 
2602   unsigned OpIdx = getOperandNo(InsertBefore);
2603   unsigned NumOperands = getNumOperands();
2604   unsigned OpsToMove = NumOperands - OpIdx;
2605 
2606   SmallVector<MachineOperand> MovingOps;
2607   MovingOps.reserve(OpsToMove);
2608 
2609   for (unsigned I = 0; I < OpsToMove; ++I) {
2610     MovingOps.emplace_back(getOperand(OpIdx));
2611     removeOperand(OpIdx);
2612   }
2613   for (const MachineOperand &MO : Ops)
2614     addOperand(MO);
2615   for (const MachineOperand &OpMoved : MovingOps)
2616     addOperand(OpMoved);
2617 
2618   // Re-tie operands.
2619   for (auto [Tie1, Tie2] : TiedOpIndices) {
2620     if (Tie1 >= OpIdx)
2621       Tie1 += Ops.size();
2622     if (Tie2 >= OpIdx)
2623       Tie2 += Ops.size();
2624     tieOperands(Tie1, Tie2);
2625   }
2626 }
2627 
2628 bool MachineInstr::mayFoldInlineAsmRegOp(unsigned OpId) const {
2629   assert(OpId && "expected non-zero operand id");
2630   assert(isInlineAsm() && "should only be used on inline asm");
2631 
2632   if (!getOperand(OpId).isReg())
2633     return false;
2634 
2635   const MachineOperand &MD = getOperand(OpId - 1);
2636   if (!MD.isImm())
2637     return false;
2638 
2639   InlineAsm::Flag F(MD.getImm());
2640   if (F.isRegUseKind() || F.isRegDefKind() || F.isRegDefEarlyClobberKind())
2641     return F.getRegMayBeFolded();
2642   return false;
2643 }
2644