xref: /llvm-project/llvm/lib/CodeGen/MachineInstr.cpp (revision e9c46c25a14624e13ceeac30fc21c785beb46067)
1 //===-- lib/CodeGen/MachineInstr.cpp --------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Methods common to all machine instructions.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "llvm/CodeGen/MachineInstr.h"
15 #include "llvm/Constants.h"
16 #include "llvm/Function.h"
17 #include "llvm/InlineAsm.h"
18 #include "llvm/Type.h"
19 #include "llvm/Value.h"
20 #include "llvm/Assembly/Writer.h"
21 #include "llvm/CodeGen/MachineConstantPool.h"
22 #include "llvm/CodeGen/MachineFunction.h"
23 #include "llvm/CodeGen/MachineMemOperand.h"
24 #include "llvm/CodeGen/MachineRegisterInfo.h"
25 #include "llvm/CodeGen/PseudoSourceValue.h"
26 #include "llvm/Target/TargetMachine.h"
27 #include "llvm/Target/TargetInstrInfo.h"
28 #include "llvm/Target/TargetInstrDesc.h"
29 #include "llvm/Target/TargetRegisterInfo.h"
30 #include "llvm/Analysis/AliasAnalysis.h"
31 #include "llvm/Analysis/DebugInfo.h"
32 #include "llvm/Support/Debug.h"
33 #include "llvm/Support/ErrorHandling.h"
34 #include "llvm/Support/LeakDetector.h"
35 #include "llvm/Support/MathExtras.h"
36 #include "llvm/Support/raw_ostream.h"
37 #include "llvm/ADT/FoldingSet.h"
38 #include "llvm/Metadata.h"
39 using namespace llvm;
40 
41 //===----------------------------------------------------------------------===//
42 // MachineOperand Implementation
43 //===----------------------------------------------------------------------===//
44 
45 /// AddRegOperandToRegInfo - Add this register operand to the specified
46 /// MachineRegisterInfo.  If it is null, then the next/prev fields should be
47 /// explicitly nulled out.
48 void MachineOperand::AddRegOperandToRegInfo(MachineRegisterInfo *RegInfo) {
49   assert(isReg() && "Can only add reg operand to use lists");
50 
51   // If the reginfo pointer is null, just explicitly null out or next/prev
52   // pointers, to ensure they are not garbage.
53   if (RegInfo == 0) {
54     Contents.Reg.Prev = 0;
55     Contents.Reg.Next = 0;
56     return;
57   }
58 
59   // Otherwise, add this operand to the head of the registers use/def list.
60   MachineOperand **Head = &RegInfo->getRegUseDefListHead(getReg());
61 
62   // For SSA values, we prefer to keep the definition at the start of the list.
63   // we do this by skipping over the definition if it is at the head of the
64   // list.
65   if (*Head && (*Head)->isDef())
66     Head = &(*Head)->Contents.Reg.Next;
67 
68   Contents.Reg.Next = *Head;
69   if (Contents.Reg.Next) {
70     assert(getReg() == Contents.Reg.Next->getReg() &&
71            "Different regs on the same list!");
72     Contents.Reg.Next->Contents.Reg.Prev = &Contents.Reg.Next;
73   }
74 
75   Contents.Reg.Prev = Head;
76   *Head = this;
77 }
78 
79 /// RemoveRegOperandFromRegInfo - Remove this register operand from the
80 /// MachineRegisterInfo it is linked with.
81 void MachineOperand::RemoveRegOperandFromRegInfo() {
82   assert(isOnRegUseList() && "Reg operand is not on a use list");
83   // Unlink this from the doubly linked list of operands.
84   MachineOperand *NextOp = Contents.Reg.Next;
85   *Contents.Reg.Prev = NextOp;
86   if (NextOp) {
87     assert(NextOp->getReg() == getReg() && "Corrupt reg use/def chain!");
88     NextOp->Contents.Reg.Prev = Contents.Reg.Prev;
89   }
90   Contents.Reg.Prev = 0;
91   Contents.Reg.Next = 0;
92 }
93 
94 void MachineOperand::setReg(unsigned Reg) {
95   if (getReg() == Reg) return; // No change.
96 
97   // Otherwise, we have to change the register.  If this operand is embedded
98   // into a machine function, we need to update the old and new register's
99   // use/def lists.
100   if (MachineInstr *MI = getParent())
101     if (MachineBasicBlock *MBB = MI->getParent())
102       if (MachineFunction *MF = MBB->getParent()) {
103         RemoveRegOperandFromRegInfo();
104         Contents.Reg.RegNo = Reg;
105         AddRegOperandToRegInfo(&MF->getRegInfo());
106         return;
107       }
108 
109   // Otherwise, just change the register, no problem.  :)
110   Contents.Reg.RegNo = Reg;
111 }
112 
113 /// ChangeToImmediate - Replace this operand with a new immediate operand of
114 /// the specified value.  If an operand is known to be an immediate already,
115 /// the setImm method should be used.
116 void MachineOperand::ChangeToImmediate(int64_t ImmVal) {
117   // If this operand is currently a register operand, and if this is in a
118   // function, deregister the operand from the register's use/def list.
119   if (isReg() && getParent() && getParent()->getParent() &&
120       getParent()->getParent()->getParent())
121     RemoveRegOperandFromRegInfo();
122 
123   OpKind = MO_Immediate;
124   Contents.ImmVal = ImmVal;
125 }
126 
127 /// ChangeToRegister - Replace this operand with a new register operand of
128 /// the specified value.  If an operand is known to be an register already,
129 /// the setReg method should be used.
130 void MachineOperand::ChangeToRegister(unsigned Reg, bool isDef, bool isImp,
131                                       bool isKill, bool isDead, bool isUndef,
132                                       bool isDebug) {
133   // If this operand is already a register operand, use setReg to update the
134   // register's use/def lists.
135   if (isReg()) {
136     assert(!isEarlyClobber());
137     setReg(Reg);
138   } else {
139     // Otherwise, change this to a register and set the reg#.
140     OpKind = MO_Register;
141     Contents.Reg.RegNo = Reg;
142 
143     // If this operand is embedded in a function, add the operand to the
144     // register's use/def list.
145     if (MachineInstr *MI = getParent())
146       if (MachineBasicBlock *MBB = MI->getParent())
147         if (MachineFunction *MF = MBB->getParent())
148           AddRegOperandToRegInfo(&MF->getRegInfo());
149   }
150 
151   IsDef = isDef;
152   IsImp = isImp;
153   IsKill = isKill;
154   IsDead = isDead;
155   IsUndef = isUndef;
156   IsEarlyClobber = false;
157   IsDebug = isDebug;
158   SubReg = 0;
159 }
160 
161 /// isIdenticalTo - Return true if this operand is identical to the specified
162 /// operand.
163 bool MachineOperand::isIdenticalTo(const MachineOperand &Other) const {
164   if (getType() != Other.getType() ||
165       getTargetFlags() != Other.getTargetFlags())
166     return false;
167 
168   switch (getType()) {
169   default: llvm_unreachable("Unrecognized operand type");
170   case MachineOperand::MO_Register:
171     return getReg() == Other.getReg() && isDef() == Other.isDef() &&
172            getSubReg() == Other.getSubReg();
173   case MachineOperand::MO_Immediate:
174     return getImm() == Other.getImm();
175   case MachineOperand::MO_FPImmediate:
176     return getFPImm() == Other.getFPImm();
177   case MachineOperand::MO_MachineBasicBlock:
178     return getMBB() == Other.getMBB();
179   case MachineOperand::MO_FrameIndex:
180     return getIndex() == Other.getIndex();
181   case MachineOperand::MO_ConstantPoolIndex:
182     return getIndex() == Other.getIndex() && getOffset() == Other.getOffset();
183   case MachineOperand::MO_JumpTableIndex:
184     return getIndex() == Other.getIndex();
185   case MachineOperand::MO_GlobalAddress:
186     return getGlobal() == Other.getGlobal() && getOffset() == Other.getOffset();
187   case MachineOperand::MO_ExternalSymbol:
188     return !strcmp(getSymbolName(), Other.getSymbolName()) &&
189            getOffset() == Other.getOffset();
190   case MachineOperand::MO_BlockAddress:
191     return getBlockAddress() == Other.getBlockAddress();
192   }
193 }
194 
195 /// print - Print the specified machine operand.
196 ///
197 void MachineOperand::print(raw_ostream &OS, const TargetMachine *TM) const {
198   // If the instruction is embedded into a basic block, we can find the
199   // target info for the instruction.
200   if (!TM)
201     if (const MachineInstr *MI = getParent())
202       if (const MachineBasicBlock *MBB = MI->getParent())
203         if (const MachineFunction *MF = MBB->getParent())
204           TM = &MF->getTarget();
205 
206   switch (getType()) {
207   case MachineOperand::MO_Register:
208     if (getReg() == 0 || TargetRegisterInfo::isVirtualRegister(getReg())) {
209       OS << "%reg" << getReg();
210     } else {
211       if (TM)
212         OS << "%" << TM->getRegisterInfo()->get(getReg()).Name;
213       else
214         OS << "%physreg" << getReg();
215     }
216 
217     if (getSubReg() != 0)
218       OS << ':' << getSubReg();
219 
220     if (isDef() || isKill() || isDead() || isImplicit() || isUndef() ||
221         isEarlyClobber()) {
222       OS << '<';
223       bool NeedComma = false;
224       if (isDef()) {
225         if (NeedComma) OS << ',';
226         if (isEarlyClobber())
227           OS << "earlyclobber,";
228         if (isImplicit())
229           OS << "imp-";
230         OS << "def";
231         NeedComma = true;
232       } else if (isImplicit()) {
233           OS << "imp-use";
234           NeedComma = true;
235       }
236 
237       if (isKill() || isDead() || isUndef()) {
238         if (NeedComma) OS << ',';
239         if (isKill())  OS << "kill";
240         if (isDead())  OS << "dead";
241         if (isUndef()) {
242           if (isKill() || isDead())
243             OS << ',';
244           OS << "undef";
245         }
246       }
247       OS << '>';
248     }
249     break;
250   case MachineOperand::MO_Immediate:
251     OS << getImm();
252     break;
253   case MachineOperand::MO_FPImmediate:
254     if (getFPImm()->getType()->isFloatTy())
255       OS << getFPImm()->getValueAPF().convertToFloat();
256     else
257       OS << getFPImm()->getValueAPF().convertToDouble();
258     break;
259   case MachineOperand::MO_MachineBasicBlock:
260     OS << "<BB#" << getMBB()->getNumber() << ">";
261     break;
262   case MachineOperand::MO_FrameIndex:
263     OS << "<fi#" << getIndex() << '>';
264     break;
265   case MachineOperand::MO_ConstantPoolIndex:
266     OS << "<cp#" << getIndex();
267     if (getOffset()) OS << "+" << getOffset();
268     OS << '>';
269     break;
270   case MachineOperand::MO_JumpTableIndex:
271     OS << "<jt#" << getIndex() << '>';
272     break;
273   case MachineOperand::MO_GlobalAddress:
274     OS << "<ga:";
275     WriteAsOperand(OS, getGlobal(), /*PrintType=*/false);
276     if (getOffset()) OS << "+" << getOffset();
277     OS << '>';
278     break;
279   case MachineOperand::MO_ExternalSymbol:
280     OS << "<es:" << getSymbolName();
281     if (getOffset()) OS << "+" << getOffset();
282     OS << '>';
283     break;
284   case MachineOperand::MO_BlockAddress:
285     OS << '<';
286     WriteAsOperand(OS, getBlockAddress(), /*PrintType=*/false);
287     OS << '>';
288     break;
289   case MachineOperand::MO_Metadata:
290     OS << '<';
291     WriteAsOperand(OS, getMetadata(), /*PrintType=*/false);
292     OS << '>';
293     break;
294   default:
295     llvm_unreachable("Unrecognized operand type");
296   }
297 
298   if (unsigned TF = getTargetFlags())
299     OS << "[TF=" << TF << ']';
300 }
301 
302 //===----------------------------------------------------------------------===//
303 // MachineMemOperand Implementation
304 //===----------------------------------------------------------------------===//
305 
306 MachineMemOperand::MachineMemOperand(const Value *v, unsigned int f,
307                                      int64_t o, uint64_t s, unsigned int a)
308   : Offset(o), Size(s), V(v),
309     Flags((f & ((1 << MOMaxBits) - 1)) | ((Log2_32(a) + 1) << MOMaxBits)) {
310   assert(getBaseAlignment() == a && "Alignment is not a power of 2!");
311   assert((isLoad() || isStore()) && "Not a load/store!");
312 }
313 
314 /// Profile - Gather unique data for the object.
315 ///
316 void MachineMemOperand::Profile(FoldingSetNodeID &ID) const {
317   ID.AddInteger(Offset);
318   ID.AddInteger(Size);
319   ID.AddPointer(V);
320   ID.AddInteger(Flags);
321 }
322 
323 void MachineMemOperand::refineAlignment(const MachineMemOperand *MMO) {
324   // The Value and Offset may differ due to CSE. But the flags and size
325   // should be the same.
326   assert(MMO->getFlags() == getFlags() && "Flags mismatch!");
327   assert(MMO->getSize() == getSize() && "Size mismatch!");
328 
329   if (MMO->getBaseAlignment() >= getBaseAlignment()) {
330     // Update the alignment value.
331     Flags = (Flags & ((1 << MOMaxBits) - 1)) |
332       ((Log2_32(MMO->getBaseAlignment()) + 1) << MOMaxBits);
333     // Also update the base and offset, because the new alignment may
334     // not be applicable with the old ones.
335     V = MMO->getValue();
336     Offset = MMO->getOffset();
337   }
338 }
339 
340 /// getAlignment - Return the minimum known alignment in bytes of the
341 /// actual memory reference.
342 uint64_t MachineMemOperand::getAlignment() const {
343   return MinAlign(getBaseAlignment(), getOffset());
344 }
345 
346 raw_ostream &llvm::operator<<(raw_ostream &OS, const MachineMemOperand &MMO) {
347   assert((MMO.isLoad() || MMO.isStore()) &&
348          "SV has to be a load, store or both.");
349 
350   if (MMO.isVolatile())
351     OS << "Volatile ";
352 
353   if (MMO.isLoad())
354     OS << "LD";
355   if (MMO.isStore())
356     OS << "ST";
357   OS << MMO.getSize();
358 
359   // Print the address information.
360   OS << "[";
361   if (!MMO.getValue())
362     OS << "<unknown>";
363   else
364     WriteAsOperand(OS, MMO.getValue(), /*PrintType=*/false);
365 
366   // If the alignment of the memory reference itself differs from the alignment
367   // of the base pointer, print the base alignment explicitly, next to the base
368   // pointer.
369   if (MMO.getBaseAlignment() != MMO.getAlignment())
370     OS << "(align=" << MMO.getBaseAlignment() << ")";
371 
372   if (MMO.getOffset() != 0)
373     OS << "+" << MMO.getOffset();
374   OS << "]";
375 
376   // Print the alignment of the reference.
377   if (MMO.getBaseAlignment() != MMO.getAlignment() ||
378       MMO.getBaseAlignment() != MMO.getSize())
379     OS << "(align=" << MMO.getAlignment() << ")";
380 
381   return OS;
382 }
383 
384 //===----------------------------------------------------------------------===//
385 // MachineInstr Implementation
386 //===----------------------------------------------------------------------===//
387 
388 /// MachineInstr ctor - This constructor creates a dummy MachineInstr with
389 /// TID NULL and no operands.
390 MachineInstr::MachineInstr()
391   : TID(0), NumImplicitOps(0), AsmPrinterFlags(0), MemRefs(0), MemRefsEnd(0),
392     Parent(0), debugLoc(DebugLoc::getUnknownLoc()) {
393   // Make sure that we get added to a machine basicblock
394   LeakDetector::addGarbageObject(this);
395 }
396 
397 void MachineInstr::addImplicitDefUseOperands() {
398   if (TID->ImplicitDefs)
399     for (const unsigned *ImpDefs = TID->ImplicitDefs; *ImpDefs; ++ImpDefs)
400       addOperand(MachineOperand::CreateReg(*ImpDefs, true, true));
401   if (TID->ImplicitUses)
402     for (const unsigned *ImpUses = TID->ImplicitUses; *ImpUses; ++ImpUses)
403       addOperand(MachineOperand::CreateReg(*ImpUses, false, true));
404 }
405 
406 /// MachineInstr ctor - This constructor create a MachineInstr and add the
407 /// implicit operands. It reserves space for number of operands specified by
408 /// TargetInstrDesc or the numOperands if it is not zero. (for
409 /// instructions with variable number of operands).
410 MachineInstr::MachineInstr(const TargetInstrDesc &tid, bool NoImp)
411   : TID(&tid), NumImplicitOps(0), AsmPrinterFlags(0),
412     MemRefs(0), MemRefsEnd(0), Parent(0),
413     debugLoc(DebugLoc::getUnknownLoc()) {
414   if (!NoImp && TID->getImplicitDefs())
415     for (const unsigned *ImpDefs = TID->getImplicitDefs(); *ImpDefs; ++ImpDefs)
416       NumImplicitOps++;
417   if (!NoImp && TID->getImplicitUses())
418     for (const unsigned *ImpUses = TID->getImplicitUses(); *ImpUses; ++ImpUses)
419       NumImplicitOps++;
420   Operands.reserve(NumImplicitOps + TID->getNumOperands());
421   if (!NoImp)
422     addImplicitDefUseOperands();
423   // Make sure that we get added to a machine basicblock
424   LeakDetector::addGarbageObject(this);
425 }
426 
427 /// MachineInstr ctor - As above, but with a DebugLoc.
428 MachineInstr::MachineInstr(const TargetInstrDesc &tid, const DebugLoc dl,
429                            bool NoImp)
430   : TID(&tid), NumImplicitOps(0), AsmPrinterFlags(0), MemRefs(0), MemRefsEnd(0),
431     Parent(0), debugLoc(dl) {
432   if (!NoImp && TID->getImplicitDefs())
433     for (const unsigned *ImpDefs = TID->getImplicitDefs(); *ImpDefs; ++ImpDefs)
434       NumImplicitOps++;
435   if (!NoImp && TID->getImplicitUses())
436     for (const unsigned *ImpUses = TID->getImplicitUses(); *ImpUses; ++ImpUses)
437       NumImplicitOps++;
438   Operands.reserve(NumImplicitOps + TID->getNumOperands());
439   if (!NoImp)
440     addImplicitDefUseOperands();
441   // Make sure that we get added to a machine basicblock
442   LeakDetector::addGarbageObject(this);
443 }
444 
445 /// MachineInstr ctor - Work exactly the same as the ctor two above, except
446 /// that the MachineInstr is created and added to the end of the specified
447 /// basic block.
448 ///
449 MachineInstr::MachineInstr(MachineBasicBlock *MBB, const TargetInstrDesc &tid)
450   : TID(&tid), NumImplicitOps(0), AsmPrinterFlags(0),
451     MemRefs(0), MemRefsEnd(0), Parent(0),
452     debugLoc(DebugLoc::getUnknownLoc()) {
453   assert(MBB && "Cannot use inserting ctor with null basic block!");
454   if (TID->ImplicitDefs)
455     for (const unsigned *ImpDefs = TID->getImplicitDefs(); *ImpDefs; ++ImpDefs)
456       NumImplicitOps++;
457   if (TID->ImplicitUses)
458     for (const unsigned *ImpUses = TID->getImplicitUses(); *ImpUses; ++ImpUses)
459       NumImplicitOps++;
460   Operands.reserve(NumImplicitOps + TID->getNumOperands());
461   addImplicitDefUseOperands();
462   // Make sure that we get added to a machine basicblock
463   LeakDetector::addGarbageObject(this);
464   MBB->push_back(this);  // Add instruction to end of basic block!
465 }
466 
467 /// MachineInstr ctor - As above, but with a DebugLoc.
468 ///
469 MachineInstr::MachineInstr(MachineBasicBlock *MBB, const DebugLoc dl,
470                            const TargetInstrDesc &tid)
471   : TID(&tid), NumImplicitOps(0), AsmPrinterFlags(0), MemRefs(0), MemRefsEnd(0),
472     Parent(0), debugLoc(dl) {
473   assert(MBB && "Cannot use inserting ctor with null basic block!");
474   if (TID->ImplicitDefs)
475     for (const unsigned *ImpDefs = TID->getImplicitDefs(); *ImpDefs; ++ImpDefs)
476       NumImplicitOps++;
477   if (TID->ImplicitUses)
478     for (const unsigned *ImpUses = TID->getImplicitUses(); *ImpUses; ++ImpUses)
479       NumImplicitOps++;
480   Operands.reserve(NumImplicitOps + TID->getNumOperands());
481   addImplicitDefUseOperands();
482   // Make sure that we get added to a machine basicblock
483   LeakDetector::addGarbageObject(this);
484   MBB->push_back(this);  // Add instruction to end of basic block!
485 }
486 
487 /// MachineInstr ctor - Copies MachineInstr arg exactly
488 ///
489 MachineInstr::MachineInstr(MachineFunction &MF, const MachineInstr &MI)
490   : TID(&MI.getDesc()), NumImplicitOps(0), AsmPrinterFlags(0),
491     MemRefs(MI.MemRefs), MemRefsEnd(MI.MemRefsEnd),
492     Parent(0), debugLoc(MI.getDebugLoc()) {
493   Operands.reserve(MI.getNumOperands());
494 
495   // Add operands
496   for (unsigned i = 0; i != MI.getNumOperands(); ++i)
497     addOperand(MI.getOperand(i));
498   NumImplicitOps = MI.NumImplicitOps;
499 
500   // Set parent to null.
501   Parent = 0;
502 
503   LeakDetector::addGarbageObject(this);
504 }
505 
506 MachineInstr::~MachineInstr() {
507   LeakDetector::removeGarbageObject(this);
508 #ifndef NDEBUG
509   for (unsigned i = 0, e = Operands.size(); i != e; ++i) {
510     assert(Operands[i].ParentMI == this && "ParentMI mismatch!");
511     assert((!Operands[i].isReg() || !Operands[i].isOnRegUseList()) &&
512            "Reg operand def/use list corrupted");
513   }
514 #endif
515 }
516 
517 /// getRegInfo - If this instruction is embedded into a MachineFunction,
518 /// return the MachineRegisterInfo object for the current function, otherwise
519 /// return null.
520 MachineRegisterInfo *MachineInstr::getRegInfo() {
521   if (MachineBasicBlock *MBB = getParent())
522     return &MBB->getParent()->getRegInfo();
523   return 0;
524 }
525 
526 /// RemoveRegOperandsFromUseLists - Unlink all of the register operands in
527 /// this instruction from their respective use lists.  This requires that the
528 /// operands already be on their use lists.
529 void MachineInstr::RemoveRegOperandsFromUseLists() {
530   for (unsigned i = 0, e = Operands.size(); i != e; ++i) {
531     if (Operands[i].isReg())
532       Operands[i].RemoveRegOperandFromRegInfo();
533   }
534 }
535 
536 /// AddRegOperandsToUseLists - Add all of the register operands in
537 /// this instruction from their respective use lists.  This requires that the
538 /// operands not be on their use lists yet.
539 void MachineInstr::AddRegOperandsToUseLists(MachineRegisterInfo &RegInfo) {
540   for (unsigned i = 0, e = Operands.size(); i != e; ++i) {
541     if (Operands[i].isReg())
542       Operands[i].AddRegOperandToRegInfo(&RegInfo);
543   }
544 }
545 
546 
547 /// addOperand - Add the specified operand to the instruction.  If it is an
548 /// implicit operand, it is added to the end of the operand list.  If it is
549 /// an explicit operand it is added at the end of the explicit operand list
550 /// (before the first implicit operand).
551 void MachineInstr::addOperand(const MachineOperand &Op) {
552   bool isImpReg = Op.isReg() && Op.isImplicit();
553   assert((isImpReg || !OperandsComplete()) &&
554          "Trying to add an operand to a machine instr that is already done!");
555 
556   MachineRegisterInfo *RegInfo = getRegInfo();
557 
558   // If we are adding the operand to the end of the list, our job is simpler.
559   // This is true most of the time, so this is a reasonable optimization.
560   if (isImpReg || NumImplicitOps == 0) {
561     // We can only do this optimization if we know that the operand list won't
562     // reallocate.
563     if (Operands.empty() || Operands.size()+1 <= Operands.capacity()) {
564       Operands.push_back(Op);
565 
566       // Set the parent of the operand.
567       Operands.back().ParentMI = this;
568 
569       // If the operand is a register, update the operand's use list.
570       if (Op.isReg()) {
571         Operands.back().AddRegOperandToRegInfo(RegInfo);
572         // If the register operand is flagged as early, mark the operand as such
573         unsigned OpNo = Operands.size() - 1;
574         if (TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
575           Operands[OpNo].setIsEarlyClobber(true);
576       }
577       return;
578     }
579   }
580 
581   // Otherwise, we have to insert a real operand before any implicit ones.
582   unsigned OpNo = Operands.size()-NumImplicitOps;
583 
584   // If this instruction isn't embedded into a function, then we don't need to
585   // update any operand lists.
586   if (RegInfo == 0) {
587     // Simple insertion, no reginfo update needed for other register operands.
588     Operands.insert(Operands.begin()+OpNo, Op);
589     Operands[OpNo].ParentMI = this;
590 
591     // Do explicitly set the reginfo for this operand though, to ensure the
592     // next/prev fields are properly nulled out.
593     if (Operands[OpNo].isReg()) {
594       Operands[OpNo].AddRegOperandToRegInfo(0);
595       // If the register operand is flagged as early, mark the operand as such
596       if (TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
597         Operands[OpNo].setIsEarlyClobber(true);
598     }
599 
600   } else if (Operands.size()+1 <= Operands.capacity()) {
601     // Otherwise, we have to remove register operands from their register use
602     // list, add the operand, then add the register operands back to their use
603     // list.  This also must handle the case when the operand list reallocates
604     // to somewhere else.
605 
606     // If insertion of this operand won't cause reallocation of the operand
607     // list, just remove the implicit operands, add the operand, then re-add all
608     // the rest of the operands.
609     for (unsigned i = OpNo, e = Operands.size(); i != e; ++i) {
610       assert(Operands[i].isReg() && "Should only be an implicit reg!");
611       Operands[i].RemoveRegOperandFromRegInfo();
612     }
613 
614     // Add the operand.  If it is a register, add it to the reg list.
615     Operands.insert(Operands.begin()+OpNo, Op);
616     Operands[OpNo].ParentMI = this;
617 
618     if (Operands[OpNo].isReg()) {
619       Operands[OpNo].AddRegOperandToRegInfo(RegInfo);
620       // If the register operand is flagged as early, mark the operand as such
621       if (TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
622         Operands[OpNo].setIsEarlyClobber(true);
623     }
624 
625     // Re-add all the implicit ops.
626     for (unsigned i = OpNo+1, e = Operands.size(); i != e; ++i) {
627       assert(Operands[i].isReg() && "Should only be an implicit reg!");
628       Operands[i].AddRegOperandToRegInfo(RegInfo);
629     }
630   } else {
631     // Otherwise, we will be reallocating the operand list.  Remove all reg
632     // operands from their list, then readd them after the operand list is
633     // reallocated.
634     RemoveRegOperandsFromUseLists();
635 
636     Operands.insert(Operands.begin()+OpNo, Op);
637     Operands[OpNo].ParentMI = this;
638 
639     // Re-add all the operands.
640     AddRegOperandsToUseLists(*RegInfo);
641 
642       // If the register operand is flagged as early, mark the operand as such
643     if (Operands[OpNo].isReg()
644         && TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
645       Operands[OpNo].setIsEarlyClobber(true);
646   }
647 }
648 
649 /// RemoveOperand - Erase an operand  from an instruction, leaving it with one
650 /// fewer operand than it started with.
651 ///
652 void MachineInstr::RemoveOperand(unsigned OpNo) {
653   assert(OpNo < Operands.size() && "Invalid operand number");
654 
655   // Special case removing the last one.
656   if (OpNo == Operands.size()-1) {
657     // If needed, remove from the reg def/use list.
658     if (Operands.back().isReg() && Operands.back().isOnRegUseList())
659       Operands.back().RemoveRegOperandFromRegInfo();
660 
661     Operands.pop_back();
662     return;
663   }
664 
665   // Otherwise, we are removing an interior operand.  If we have reginfo to
666   // update, remove all operands that will be shifted down from their reg lists,
667   // move everything down, then re-add them.
668   MachineRegisterInfo *RegInfo = getRegInfo();
669   if (RegInfo) {
670     for (unsigned i = OpNo, e = Operands.size(); i != e; ++i) {
671       if (Operands[i].isReg())
672         Operands[i].RemoveRegOperandFromRegInfo();
673     }
674   }
675 
676   Operands.erase(Operands.begin()+OpNo);
677 
678   if (RegInfo) {
679     for (unsigned i = OpNo, e = Operands.size(); i != e; ++i) {
680       if (Operands[i].isReg())
681         Operands[i].AddRegOperandToRegInfo(RegInfo);
682     }
683   }
684 }
685 
686 /// addMemOperand - Add a MachineMemOperand to the machine instruction.
687 /// This function should be used only occasionally. The setMemRefs function
688 /// is the primary method for setting up a MachineInstr's MemRefs list.
689 void MachineInstr::addMemOperand(MachineFunction &MF,
690                                  MachineMemOperand *MO) {
691   mmo_iterator OldMemRefs = MemRefs;
692   mmo_iterator OldMemRefsEnd = MemRefsEnd;
693 
694   size_t NewNum = (MemRefsEnd - MemRefs) + 1;
695   mmo_iterator NewMemRefs = MF.allocateMemRefsArray(NewNum);
696   mmo_iterator NewMemRefsEnd = NewMemRefs + NewNum;
697 
698   std::copy(OldMemRefs, OldMemRefsEnd, NewMemRefs);
699   NewMemRefs[NewNum - 1] = MO;
700 
701   MemRefs = NewMemRefs;
702   MemRefsEnd = NewMemRefsEnd;
703 }
704 
705 bool MachineInstr::isIdenticalTo(const MachineInstr *Other,
706                                  MICheckType Check) const {
707     if (Other->getOpcode() != getOpcode() ||
708         Other->getNumOperands() != getNumOperands())
709       return false;
710     for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
711       const MachineOperand &MO = getOperand(i);
712       const MachineOperand &OMO = Other->getOperand(i);
713       if (Check != CheckDefs && MO.isReg() && MO.isDef()) {
714         if (Check == IgnoreDefs)
715           continue;
716         // Check == IgnoreVRegDefs
717         if (TargetRegisterInfo::isPhysicalRegister(MO.getReg()) ||
718             TargetRegisterInfo::isPhysicalRegister(OMO.getReg()))
719           if (MO.getReg() != OMO.getReg())
720             return false;
721       } else if (!MO.isIdenticalTo(OMO))
722         return false;
723     }
724     return true;
725 }
726 
727 /// removeFromParent - This method unlinks 'this' from the containing basic
728 /// block, and returns it, but does not delete it.
729 MachineInstr *MachineInstr::removeFromParent() {
730   assert(getParent() && "Not embedded in a basic block!");
731   getParent()->remove(this);
732   return this;
733 }
734 
735 
736 /// eraseFromParent - This method unlinks 'this' from the containing basic
737 /// block, and deletes it.
738 void MachineInstr::eraseFromParent() {
739   assert(getParent() && "Not embedded in a basic block!");
740   getParent()->erase(this);
741 }
742 
743 
744 /// OperandComplete - Return true if it's illegal to add a new operand
745 ///
746 bool MachineInstr::OperandsComplete() const {
747   unsigned short NumOperands = TID->getNumOperands();
748   if (!TID->isVariadic() && getNumOperands()-NumImplicitOps >= NumOperands)
749     return true;  // Broken: we have all the operands of this instruction!
750   return false;
751 }
752 
753 /// getNumExplicitOperands - Returns the number of non-implicit operands.
754 ///
755 unsigned MachineInstr::getNumExplicitOperands() const {
756   unsigned NumOperands = TID->getNumOperands();
757   if (!TID->isVariadic())
758     return NumOperands;
759 
760   for (unsigned i = NumOperands, e = getNumOperands(); i != e; ++i) {
761     const MachineOperand &MO = getOperand(i);
762     if (!MO.isReg() || !MO.isImplicit())
763       NumOperands++;
764   }
765   return NumOperands;
766 }
767 
768 
769 /// findRegisterUseOperandIdx() - Returns the MachineOperand that is a use of
770 /// the specific register or -1 if it is not found. It further tightens
771 /// the search criteria to a use that kills the register if isKill is true.
772 int MachineInstr::findRegisterUseOperandIdx(unsigned Reg, bool isKill,
773                                           const TargetRegisterInfo *TRI) const {
774   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
775     const MachineOperand &MO = getOperand(i);
776     if (!MO.isReg() || !MO.isUse())
777       continue;
778     unsigned MOReg = MO.getReg();
779     if (!MOReg)
780       continue;
781     if (MOReg == Reg ||
782         (TRI &&
783          TargetRegisterInfo::isPhysicalRegister(MOReg) &&
784          TargetRegisterInfo::isPhysicalRegister(Reg) &&
785          TRI->isSubRegister(MOReg, Reg)))
786       if (!isKill || MO.isKill())
787         return i;
788   }
789   return -1;
790 }
791 
792 /// findRegisterDefOperandIdx() - Returns the operand index that is a def of
793 /// the specified register or -1 if it is not found. If isDead is true, defs
794 /// that are not dead are skipped. If TargetRegisterInfo is non-null, then it
795 /// also checks if there is a def of a super-register.
796 int MachineInstr::findRegisterDefOperandIdx(unsigned Reg, bool isDead,
797                                           const TargetRegisterInfo *TRI) const {
798   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
799     const MachineOperand &MO = getOperand(i);
800     if (!MO.isReg() || !MO.isDef())
801       continue;
802     unsigned MOReg = MO.getReg();
803     if (MOReg == Reg ||
804         (TRI &&
805          TargetRegisterInfo::isPhysicalRegister(MOReg) &&
806          TargetRegisterInfo::isPhysicalRegister(Reg) &&
807          TRI->isSubRegister(MOReg, Reg)))
808       if (!isDead || MO.isDead())
809         return i;
810   }
811   return -1;
812 }
813 
814 /// findFirstPredOperandIdx() - Find the index of the first operand in the
815 /// operand list that is used to represent the predicate. It returns -1 if
816 /// none is found.
817 int MachineInstr::findFirstPredOperandIdx() const {
818   const TargetInstrDesc &TID = getDesc();
819   if (TID.isPredicable()) {
820     for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
821       if (TID.OpInfo[i].isPredicate())
822         return i;
823   }
824 
825   return -1;
826 }
827 
828 /// isRegTiedToUseOperand - Given the index of a register def operand,
829 /// check if the register def is tied to a source operand, due to either
830 /// two-address elimination or inline assembly constraints. Returns the
831 /// first tied use operand index by reference is UseOpIdx is not null.
832 bool MachineInstr::
833 isRegTiedToUseOperand(unsigned DefOpIdx, unsigned *UseOpIdx) const {
834   if (isInlineAsm()) {
835     assert(DefOpIdx >= 2);
836     const MachineOperand &MO = getOperand(DefOpIdx);
837     if (!MO.isReg() || !MO.isDef() || MO.getReg() == 0)
838       return false;
839     // Determine the actual operand index that corresponds to this index.
840     unsigned DefNo = 0;
841     unsigned DefPart = 0;
842     for (unsigned i = 1, e = getNumOperands(); i < e; ) {
843       const MachineOperand &FMO = getOperand(i);
844       // After the normal asm operands there may be additional imp-def regs.
845       if (!FMO.isImm())
846         return false;
847       // Skip over this def.
848       unsigned NumOps = InlineAsm::getNumOperandRegisters(FMO.getImm());
849       unsigned PrevDef = i + 1;
850       i = PrevDef + NumOps;
851       if (i > DefOpIdx) {
852         DefPart = DefOpIdx - PrevDef;
853         break;
854       }
855       ++DefNo;
856     }
857     for (unsigned i = 1, e = getNumOperands(); i != e; ++i) {
858       const MachineOperand &FMO = getOperand(i);
859       if (!FMO.isImm())
860         continue;
861       if (i+1 >= e || !getOperand(i+1).isReg() || !getOperand(i+1).isUse())
862         continue;
863       unsigned Idx;
864       if (InlineAsm::isUseOperandTiedToDef(FMO.getImm(), Idx) &&
865           Idx == DefNo) {
866         if (UseOpIdx)
867           *UseOpIdx = (unsigned)i + 1 + DefPart;
868         return true;
869       }
870     }
871     return false;
872   }
873 
874   assert(getOperand(DefOpIdx).isDef() && "DefOpIdx is not a def!");
875   const TargetInstrDesc &TID = getDesc();
876   for (unsigned i = 0, e = TID.getNumOperands(); i != e; ++i) {
877     const MachineOperand &MO = getOperand(i);
878     if (MO.isReg() && MO.isUse() &&
879         TID.getOperandConstraint(i, TOI::TIED_TO) == (int)DefOpIdx) {
880       if (UseOpIdx)
881         *UseOpIdx = (unsigned)i;
882       return true;
883     }
884   }
885   return false;
886 }
887 
888 /// isRegTiedToDefOperand - Return true if the operand of the specified index
889 /// is a register use and it is tied to an def operand. It also returns the def
890 /// operand index by reference.
891 bool MachineInstr::
892 isRegTiedToDefOperand(unsigned UseOpIdx, unsigned *DefOpIdx) const {
893   if (isInlineAsm()) {
894     const MachineOperand &MO = getOperand(UseOpIdx);
895     if (!MO.isReg() || !MO.isUse() || MO.getReg() == 0)
896       return false;
897 
898     // Find the flag operand corresponding to UseOpIdx
899     unsigned FlagIdx, NumOps=0;
900     for (FlagIdx = 1; FlagIdx < UseOpIdx; FlagIdx += NumOps+1) {
901       const MachineOperand &UFMO = getOperand(FlagIdx);
902       // After the normal asm operands there may be additional imp-def regs.
903       if (!UFMO.isImm())
904         return false;
905       NumOps = InlineAsm::getNumOperandRegisters(UFMO.getImm());
906       assert(NumOps < getNumOperands() && "Invalid inline asm flag");
907       if (UseOpIdx < FlagIdx+NumOps+1)
908         break;
909     }
910     if (FlagIdx >= UseOpIdx)
911       return false;
912     const MachineOperand &UFMO = getOperand(FlagIdx);
913     unsigned DefNo;
914     if (InlineAsm::isUseOperandTiedToDef(UFMO.getImm(), DefNo)) {
915       if (!DefOpIdx)
916         return true;
917 
918       unsigned DefIdx = 1;
919       // Remember to adjust the index. First operand is asm string, then there
920       // is a flag for each.
921       while (DefNo) {
922         const MachineOperand &FMO = getOperand(DefIdx);
923         assert(FMO.isImm());
924         // Skip over this def.
925         DefIdx += InlineAsm::getNumOperandRegisters(FMO.getImm()) + 1;
926         --DefNo;
927       }
928       *DefOpIdx = DefIdx + UseOpIdx - FlagIdx;
929       return true;
930     }
931     return false;
932   }
933 
934   const TargetInstrDesc &TID = getDesc();
935   if (UseOpIdx >= TID.getNumOperands())
936     return false;
937   const MachineOperand &MO = getOperand(UseOpIdx);
938   if (!MO.isReg() || !MO.isUse())
939     return false;
940   int DefIdx = TID.getOperandConstraint(UseOpIdx, TOI::TIED_TO);
941   if (DefIdx == -1)
942     return false;
943   if (DefOpIdx)
944     *DefOpIdx = (unsigned)DefIdx;
945   return true;
946 }
947 
948 /// copyKillDeadInfo - Copies kill / dead operand properties from MI.
949 ///
950 void MachineInstr::copyKillDeadInfo(const MachineInstr *MI) {
951   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
952     const MachineOperand &MO = MI->getOperand(i);
953     if (!MO.isReg() || (!MO.isKill() && !MO.isDead()))
954       continue;
955     for (unsigned j = 0, ee = getNumOperands(); j != ee; ++j) {
956       MachineOperand &MOp = getOperand(j);
957       if (!MOp.isIdenticalTo(MO))
958         continue;
959       if (MO.isKill())
960         MOp.setIsKill();
961       else
962         MOp.setIsDead();
963       break;
964     }
965   }
966 }
967 
968 /// copyPredicates - Copies predicate operand(s) from MI.
969 void MachineInstr::copyPredicates(const MachineInstr *MI) {
970   const TargetInstrDesc &TID = MI->getDesc();
971   if (!TID.isPredicable())
972     return;
973   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
974     if (TID.OpInfo[i].isPredicate()) {
975       // Predicated operands must be last operands.
976       addOperand(MI->getOperand(i));
977     }
978   }
979 }
980 
981 /// isSafeToMove - Return true if it is safe to move this instruction. If
982 /// SawStore is set to true, it means that there is a store (or call) between
983 /// the instruction's location and its intended destination.
984 bool MachineInstr::isSafeToMove(const TargetInstrInfo *TII,
985                                 AliasAnalysis *AA,
986                                 bool &SawStore) const {
987   // Ignore stuff that we obviously can't move.
988   if (TID->mayStore() || TID->isCall()) {
989     SawStore = true;
990     return false;
991   }
992   if (TID->isTerminator() || TID->hasUnmodeledSideEffects())
993     return false;
994 
995   // See if this instruction does a load.  If so, we have to guarantee that the
996   // loaded value doesn't change between the load and the its intended
997   // destination. The check for isInvariantLoad gives the targe the chance to
998   // classify the load as always returning a constant, e.g. a constant pool
999   // load.
1000   if (TID->mayLoad() && !isInvariantLoad(AA))
1001     // Otherwise, this is a real load.  If there is a store between the load and
1002     // end of block, or if the load is volatile, we can't move it.
1003     return !SawStore && !hasVolatileMemoryRef();
1004 
1005   return true;
1006 }
1007 
1008 /// isSafeToReMat - Return true if it's safe to rematerialize the specified
1009 /// instruction which defined the specified register instead of copying it.
1010 bool MachineInstr::isSafeToReMat(const TargetInstrInfo *TII,
1011                                  AliasAnalysis *AA,
1012                                  unsigned DstReg) const {
1013   bool SawStore = false;
1014   if (!TII->isTriviallyReMaterializable(this, AA) ||
1015       !isSafeToMove(TII, AA, SawStore))
1016     return false;
1017   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1018     const MachineOperand &MO = getOperand(i);
1019     if (!MO.isReg())
1020       continue;
1021     // FIXME: For now, do not remat any instruction with register operands.
1022     // Later on, we can loosen the restriction is the register operands have
1023     // not been modified between the def and use. Note, this is different from
1024     // MachineSink because the code is no longer in two-address form (at least
1025     // partially).
1026     if (MO.isUse())
1027       return false;
1028     else if (!MO.isDead() && MO.getReg() != DstReg)
1029       return false;
1030   }
1031   return true;
1032 }
1033 
1034 /// hasVolatileMemoryRef - Return true if this instruction may have a
1035 /// volatile memory reference, or if the information describing the
1036 /// memory reference is not available. Return false if it is known to
1037 /// have no volatile memory references.
1038 bool MachineInstr::hasVolatileMemoryRef() const {
1039   // An instruction known never to access memory won't have a volatile access.
1040   if (!TID->mayStore() &&
1041       !TID->mayLoad() &&
1042       !TID->isCall() &&
1043       !TID->hasUnmodeledSideEffects())
1044     return false;
1045 
1046   // Otherwise, if the instruction has no memory reference information,
1047   // conservatively assume it wasn't preserved.
1048   if (memoperands_empty())
1049     return true;
1050 
1051   // Check the memory reference information for volatile references.
1052   for (mmo_iterator I = memoperands_begin(), E = memoperands_end(); I != E; ++I)
1053     if ((*I)->isVolatile())
1054       return true;
1055 
1056   return false;
1057 }
1058 
1059 /// isInvariantLoad - Return true if this instruction is loading from a
1060 /// location whose value is invariant across the function.  For example,
1061 /// loading a value from the constant pool or from the argument area
1062 /// of a function if it does not change.  This should only return true of
1063 /// *all* loads the instruction does are invariant (if it does multiple loads).
1064 bool MachineInstr::isInvariantLoad(AliasAnalysis *AA) const {
1065   // If the instruction doesn't load at all, it isn't an invariant load.
1066   if (!TID->mayLoad())
1067     return false;
1068 
1069   // If the instruction has lost its memoperands, conservatively assume that
1070   // it may not be an invariant load.
1071   if (memoperands_empty())
1072     return false;
1073 
1074   const MachineFrameInfo *MFI = getParent()->getParent()->getFrameInfo();
1075 
1076   for (mmo_iterator I = memoperands_begin(),
1077        E = memoperands_end(); I != E; ++I) {
1078     if ((*I)->isVolatile()) return false;
1079     if ((*I)->isStore()) return false;
1080 
1081     if (const Value *V = (*I)->getValue()) {
1082       // A load from a constant PseudoSourceValue is invariant.
1083       if (const PseudoSourceValue *PSV = dyn_cast<PseudoSourceValue>(V))
1084         if (PSV->isConstant(MFI))
1085           continue;
1086       // If we have an AliasAnalysis, ask it whether the memory is constant.
1087       if (AA && AA->pointsToConstantMemory(V))
1088         continue;
1089     }
1090 
1091     // Otherwise assume conservatively.
1092     return false;
1093   }
1094 
1095   // Everything checks out.
1096   return true;
1097 }
1098 
1099 /// isConstantValuePHI - If the specified instruction is a PHI that always
1100 /// merges together the same virtual register, return the register, otherwise
1101 /// return 0.
1102 unsigned MachineInstr::isConstantValuePHI() const {
1103   if (!isPHI())
1104     return 0;
1105   assert(getNumOperands() >= 3 &&
1106          "It's illegal to have a PHI without source operands");
1107 
1108   unsigned Reg = getOperand(1).getReg();
1109   for (unsigned i = 3, e = getNumOperands(); i < e; i += 2)
1110     if (getOperand(i).getReg() != Reg)
1111       return 0;
1112   return Reg;
1113 }
1114 
1115 void MachineInstr::dump() const {
1116   dbgs() << "  " << *this;
1117 }
1118 
1119 void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
1120   // We can be a bit tidier if we know the TargetMachine and/or MachineFunction.
1121   const MachineFunction *MF = 0;
1122   if (const MachineBasicBlock *MBB = getParent()) {
1123     MF = MBB->getParent();
1124     if (!TM && MF)
1125       TM = &MF->getTarget();
1126   }
1127 
1128   // Print explicitly defined operands on the left of an assignment syntax.
1129   unsigned StartOp = 0, e = getNumOperands();
1130   for (; StartOp < e && getOperand(StartOp).isReg() &&
1131          getOperand(StartOp).isDef() &&
1132          !getOperand(StartOp).isImplicit();
1133        ++StartOp) {
1134     if (StartOp != 0) OS << ", ";
1135     getOperand(StartOp).print(OS, TM);
1136   }
1137 
1138   if (StartOp != 0)
1139     OS << " = ";
1140 
1141   // Print the opcode name.
1142   OS << getDesc().getName();
1143 
1144   // Print the rest of the operands.
1145   bool OmittedAnyCallClobbers = false;
1146   bool FirstOp = true;
1147   for (unsigned i = StartOp, e = getNumOperands(); i != e; ++i) {
1148     const MachineOperand &MO = getOperand(i);
1149 
1150     // Omit call-clobbered registers which aren't used anywhere. This makes
1151     // call instructions much less noisy on targets where calls clobber lots
1152     // of registers. Don't rely on MO.isDead() because we may be called before
1153     // LiveVariables is run, or we may be looking at a non-allocatable reg.
1154     if (MF && getDesc().isCall() &&
1155         MO.isReg() && MO.isImplicit() && MO.isDef()) {
1156       unsigned Reg = MO.getReg();
1157       if (Reg != 0 && TargetRegisterInfo::isPhysicalRegister(Reg)) {
1158         const MachineRegisterInfo &MRI = MF->getRegInfo();
1159         if (MRI.use_empty(Reg) && !MRI.isLiveOut(Reg)) {
1160           bool HasAliasLive = false;
1161           for (const unsigned *Alias = TM->getRegisterInfo()->getAliasSet(Reg);
1162                unsigned AliasReg = *Alias; ++Alias)
1163             if (!MRI.use_empty(AliasReg) || MRI.isLiveOut(AliasReg)) {
1164               HasAliasLive = true;
1165               break;
1166             }
1167           if (!HasAliasLive) {
1168             OmittedAnyCallClobbers = true;
1169             continue;
1170           }
1171         }
1172       }
1173     }
1174 
1175     if (FirstOp) FirstOp = false; else OS << ",";
1176     OS << " ";
1177     if (i < getDesc().NumOperands) {
1178       const TargetOperandInfo &TOI = getDesc().OpInfo[i];
1179       if (TOI.isPredicate())
1180         OS << "pred:";
1181       if (TOI.isOptionalDef())
1182         OS << "opt:";
1183     }
1184     MO.print(OS, TM);
1185   }
1186 
1187   // Briefly indicate whether any call clobbers were omitted.
1188   if (OmittedAnyCallClobbers) {
1189     if (!FirstOp) OS << ",";
1190     OS << " ...";
1191   }
1192 
1193   bool HaveSemi = false;
1194   if (!memoperands_empty()) {
1195     if (!HaveSemi) OS << ";"; HaveSemi = true;
1196 
1197     OS << " mem:";
1198     for (mmo_iterator i = memoperands_begin(), e = memoperands_end();
1199          i != e; ++i) {
1200       OS << **i;
1201       if (next(i) != e)
1202         OS << " ";
1203     }
1204   }
1205 
1206   if (!debugLoc.isUnknown() && MF) {
1207     if (!HaveSemi) OS << ";";
1208 
1209     // TODO: print InlinedAtLoc information
1210 
1211     DILocation DLT = MF->getDILocation(debugLoc);
1212     DIScope Scope = DLT.getScope();
1213     OS << " dbg:";
1214     // Omit the directory, since it's usually long and uninteresting.
1215     if (!Scope.isNull())
1216       OS << Scope.getFilename();
1217     else
1218       OS << "<unknown>";
1219     OS << ':' << DLT.getLineNumber();
1220     if (DLT.getColumnNumber() != 0)
1221       OS << ':' << DLT.getColumnNumber();
1222   }
1223 
1224   OS << "\n";
1225 }
1226 
1227 bool MachineInstr::addRegisterKilled(unsigned IncomingReg,
1228                                      const TargetRegisterInfo *RegInfo,
1229                                      bool AddIfNotFound) {
1230   bool isPhysReg = TargetRegisterInfo::isPhysicalRegister(IncomingReg);
1231   bool hasAliases = isPhysReg && RegInfo->getAliasSet(IncomingReg);
1232   bool Found = false;
1233   SmallVector<unsigned,4> DeadOps;
1234   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1235     MachineOperand &MO = getOperand(i);
1236     if (!MO.isReg() || !MO.isUse() || MO.isUndef())
1237       continue;
1238     unsigned Reg = MO.getReg();
1239     if (!Reg)
1240       continue;
1241 
1242     if (Reg == IncomingReg) {
1243       if (!Found) {
1244         if (MO.isKill())
1245           // The register is already marked kill.
1246           return true;
1247         if (isPhysReg && isRegTiedToDefOperand(i))
1248           // Two-address uses of physregs must not be marked kill.
1249           return true;
1250         MO.setIsKill();
1251         Found = true;
1252       }
1253     } else if (hasAliases && MO.isKill() &&
1254                TargetRegisterInfo::isPhysicalRegister(Reg)) {
1255       // A super-register kill already exists.
1256       if (RegInfo->isSuperRegister(IncomingReg, Reg))
1257         return true;
1258       if (RegInfo->isSubRegister(IncomingReg, Reg))
1259         DeadOps.push_back(i);
1260     }
1261   }
1262 
1263   // Trim unneeded kill operands.
1264   while (!DeadOps.empty()) {
1265     unsigned OpIdx = DeadOps.back();
1266     if (getOperand(OpIdx).isImplicit())
1267       RemoveOperand(OpIdx);
1268     else
1269       getOperand(OpIdx).setIsKill(false);
1270     DeadOps.pop_back();
1271   }
1272 
1273   // If not found, this means an alias of one of the operands is killed. Add a
1274   // new implicit operand if required.
1275   if (!Found && AddIfNotFound) {
1276     addOperand(MachineOperand::CreateReg(IncomingReg,
1277                                          false /*IsDef*/,
1278                                          true  /*IsImp*/,
1279                                          true  /*IsKill*/));
1280     return true;
1281   }
1282   return Found;
1283 }
1284 
1285 bool MachineInstr::addRegisterDead(unsigned IncomingReg,
1286                                    const TargetRegisterInfo *RegInfo,
1287                                    bool AddIfNotFound) {
1288   bool isPhysReg = TargetRegisterInfo::isPhysicalRegister(IncomingReg);
1289   bool hasAliases = isPhysReg && RegInfo->getAliasSet(IncomingReg);
1290   bool Found = false;
1291   SmallVector<unsigned,4> DeadOps;
1292   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1293     MachineOperand &MO = getOperand(i);
1294     if (!MO.isReg() || !MO.isDef())
1295       continue;
1296     unsigned Reg = MO.getReg();
1297     if (!Reg)
1298       continue;
1299 
1300     if (Reg == IncomingReg) {
1301       if (!Found) {
1302         if (MO.isDead())
1303           // The register is already marked dead.
1304           return true;
1305         MO.setIsDead();
1306         Found = true;
1307       }
1308     } else if (hasAliases && MO.isDead() &&
1309                TargetRegisterInfo::isPhysicalRegister(Reg)) {
1310       // There exists a super-register that's marked dead.
1311       if (RegInfo->isSuperRegister(IncomingReg, Reg))
1312         return true;
1313       if (RegInfo->getSubRegisters(IncomingReg) &&
1314           RegInfo->getSuperRegisters(Reg) &&
1315           RegInfo->isSubRegister(IncomingReg, Reg))
1316         DeadOps.push_back(i);
1317     }
1318   }
1319 
1320   // Trim unneeded dead operands.
1321   while (!DeadOps.empty()) {
1322     unsigned OpIdx = DeadOps.back();
1323     if (getOperand(OpIdx).isImplicit())
1324       RemoveOperand(OpIdx);
1325     else
1326       getOperand(OpIdx).setIsDead(false);
1327     DeadOps.pop_back();
1328   }
1329 
1330   // If not found, this means an alias of one of the operands is dead. Add a
1331   // new implicit operand if required.
1332   if (Found || !AddIfNotFound)
1333     return Found;
1334 
1335   addOperand(MachineOperand::CreateReg(IncomingReg,
1336                                        true  /*IsDef*/,
1337                                        true  /*IsImp*/,
1338                                        false /*IsKill*/,
1339                                        true  /*IsDead*/));
1340   return true;
1341 }
1342 
1343 void MachineInstr::addRegisterDefined(unsigned IncomingReg,
1344                                       const TargetRegisterInfo *RegInfo) {
1345   MachineOperand *MO = findRegisterDefOperand(IncomingReg, false, RegInfo);
1346   if (!MO || MO->getSubReg())
1347     addOperand(MachineOperand::CreateReg(IncomingReg,
1348                                          true  /*IsDef*/,
1349                                          true  /*IsImp*/));
1350 }
1351