MachineInstr.cpp revision 95d594cac3737ae1594a391276942a443cac426b
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/LLVMContext.h"
19#include "llvm/Metadata.h"
20#include "llvm/Module.h"
21#include "llvm/Type.h"
22#include "llvm/Value.h"
23#include "llvm/Assembly/Writer.h"
24#include "llvm/CodeGen/MachineConstantPool.h"
25#include "llvm/CodeGen/MachineFunction.h"
26#include "llvm/CodeGen/MachineMemOperand.h"
27#include "llvm/CodeGen/MachineModuleInfo.h"
28#include "llvm/CodeGen/MachineRegisterInfo.h"
29#include "llvm/CodeGen/PseudoSourceValue.h"
30#include "llvm/MC/MCInstrDesc.h"
31#include "llvm/MC/MCSymbol.h"
32#include "llvm/Target/TargetMachine.h"
33#include "llvm/Target/TargetInstrInfo.h"
34#include "llvm/Target/TargetRegisterInfo.h"
35#include "llvm/Analysis/AliasAnalysis.h"
36#include "llvm/Analysis/DebugInfo.h"
37#include "llvm/Support/Debug.h"
38#include "llvm/Support/ErrorHandling.h"
39#include "llvm/Support/LeakDetector.h"
40#include "llvm/Support/MathExtras.h"
41#include "llvm/Support/raw_ostream.h"
42#include "llvm/ADT/FoldingSet.h"
43#include "llvm/ADT/Hashing.h"
44using namespace llvm;
45
46//===----------------------------------------------------------------------===//
47// MachineOperand Implementation
48//===----------------------------------------------------------------------===//
49
50/// AddRegOperandToRegInfo - Add this register operand to the specified
51/// MachineRegisterInfo.  If it is null, then the next/prev fields should be
52/// explicitly nulled out.
53void MachineOperand::AddRegOperandToRegInfo(MachineRegisterInfo *RegInfo) {
54  assert(isReg() && "Can only add reg operand to use lists");
55
56  // If the reginfo pointer is null, just explicitly null out or next/prev
57  // pointers, to ensure they are not garbage.
58  if (RegInfo == 0) {
59    Contents.Reg.Prev = 0;
60    Contents.Reg.Next = 0;
61    return;
62  }
63
64  // Otherwise, add this operand to the head of the registers use/def list.
65  MachineOperand **Head = &RegInfo->getRegUseDefListHead(getReg());
66
67  // For SSA values, we prefer to keep the definition at the start of the list.
68  // we do this by skipping over the definition if it is at the head of the
69  // list.
70  if (*Head && (*Head)->isDef())
71    Head = &(*Head)->Contents.Reg.Next;
72
73  Contents.Reg.Next = *Head;
74  if (Contents.Reg.Next) {
75    assert(getReg() == Contents.Reg.Next->getReg() &&
76           "Different regs on the same list!");
77    Contents.Reg.Next->Contents.Reg.Prev = &Contents.Reg.Next;
78  }
79
80  Contents.Reg.Prev = Head;
81  *Head = this;
82}
83
84/// RemoveRegOperandFromRegInfo - Remove this register operand from the
85/// MachineRegisterInfo it is linked with.
86void MachineOperand::RemoveRegOperandFromRegInfo() {
87  assert(isOnRegUseList() && "Reg operand is not on a use list");
88  // Unlink this from the doubly linked list of operands.
89  MachineOperand *NextOp = Contents.Reg.Next;
90  *Contents.Reg.Prev = NextOp;
91  if (NextOp) {
92    assert(NextOp->getReg() == getReg() && "Corrupt reg use/def chain!");
93    NextOp->Contents.Reg.Prev = Contents.Reg.Prev;
94  }
95  Contents.Reg.Prev = 0;
96  Contents.Reg.Next = 0;
97}
98
99void MachineOperand::setReg(unsigned Reg) {
100  if (getReg() == Reg) return; // No change.
101
102  // Otherwise, we have to change the register.  If this operand is embedded
103  // into a machine function, we need to update the old and new register's
104  // use/def lists.
105  if (MachineInstr *MI = getParent())
106    if (MachineBasicBlock *MBB = MI->getParent())
107      if (MachineFunction *MF = MBB->getParent()) {
108        RemoveRegOperandFromRegInfo();
109        SmallContents.RegNo = Reg;
110        AddRegOperandToRegInfo(&MF->getRegInfo());
111        return;
112      }
113
114  // Otherwise, just change the register, no problem.  :)
115  SmallContents.RegNo = Reg;
116}
117
118void MachineOperand::substVirtReg(unsigned Reg, unsigned SubIdx,
119                                  const TargetRegisterInfo &TRI) {
120  assert(TargetRegisterInfo::isVirtualRegister(Reg));
121  if (SubIdx && getSubReg())
122    SubIdx = TRI.composeSubRegIndices(SubIdx, getSubReg());
123  setReg(Reg);
124  if (SubIdx)
125    setSubReg(SubIdx);
126}
127
128void MachineOperand::substPhysReg(unsigned Reg, const TargetRegisterInfo &TRI) {
129  assert(TargetRegisterInfo::isPhysicalRegister(Reg));
130  if (getSubReg()) {
131    Reg = TRI.getSubReg(Reg, getSubReg());
132    // Note that getSubReg() may return 0 if the sub-register doesn't exist.
133    // That won't happen in legal code.
134    setSubReg(0);
135  }
136  setReg(Reg);
137}
138
139/// ChangeToImmediate - Replace this operand with a new immediate operand of
140/// the specified value.  If an operand is known to be an immediate already,
141/// the setImm method should be used.
142void MachineOperand::ChangeToImmediate(int64_t ImmVal) {
143  // If this operand is currently a register operand, and if this is in a
144  // function, deregister the operand from the register's use/def list.
145  if (isReg() && getParent() && getParent()->getParent() &&
146      getParent()->getParent()->getParent())
147    RemoveRegOperandFromRegInfo();
148
149  OpKind = MO_Immediate;
150  Contents.ImmVal = ImmVal;
151}
152
153/// ChangeToRegister - Replace this operand with a new register operand of
154/// the specified value.  If an operand is known to be an register already,
155/// the setReg method should be used.
156void MachineOperand::ChangeToRegister(unsigned Reg, bool isDef, bool isImp,
157                                      bool isKill, bool isDead, bool isUndef,
158                                      bool isDebug) {
159  // If this operand is already a register operand, use setReg to update the
160  // register's use/def lists.
161  if (isReg()) {
162    assert(!isEarlyClobber());
163    setReg(Reg);
164  } else {
165    // Otherwise, change this to a register and set the reg#.
166    OpKind = MO_Register;
167    SmallContents.RegNo = Reg;
168
169    // If this operand is embedded in a function, add the operand to the
170    // register's use/def list.
171    if (MachineInstr *MI = getParent())
172      if (MachineBasicBlock *MBB = MI->getParent())
173        if (MachineFunction *MF = MBB->getParent())
174          AddRegOperandToRegInfo(&MF->getRegInfo());
175  }
176
177  IsDef = isDef;
178  IsImp = isImp;
179  IsKill = isKill;
180  IsDead = isDead;
181  IsUndef = isUndef;
182  IsInternalRead = false;
183  IsEarlyClobber = false;
184  IsDebug = isDebug;
185  SubReg = 0;
186}
187
188/// isIdenticalTo - Return true if this operand is identical to the specified
189/// operand.
190bool MachineOperand::isIdenticalTo(const MachineOperand &Other) const {
191  if (getType() != Other.getType() ||
192      getTargetFlags() != Other.getTargetFlags())
193    return false;
194
195  switch (getType()) {
196  case MachineOperand::MO_Register:
197    return getReg() == Other.getReg() && isDef() == Other.isDef() &&
198           getSubReg() == Other.getSubReg();
199  case MachineOperand::MO_Immediate:
200    return getImm() == Other.getImm();
201  case MachineOperand::MO_CImmediate:
202    return getCImm() == Other.getCImm();
203  case MachineOperand::MO_FPImmediate:
204    return getFPImm() == Other.getFPImm();
205  case MachineOperand::MO_MachineBasicBlock:
206    return getMBB() == Other.getMBB();
207  case MachineOperand::MO_FrameIndex:
208    return getIndex() == Other.getIndex();
209  case MachineOperand::MO_ConstantPoolIndex:
210    return getIndex() == Other.getIndex() && getOffset() == Other.getOffset();
211  case MachineOperand::MO_JumpTableIndex:
212    return getIndex() == Other.getIndex();
213  case MachineOperand::MO_GlobalAddress:
214    return getGlobal() == Other.getGlobal() && getOffset() == Other.getOffset();
215  case MachineOperand::MO_ExternalSymbol:
216    return !strcmp(getSymbolName(), Other.getSymbolName()) &&
217           getOffset() == Other.getOffset();
218  case MachineOperand::MO_BlockAddress:
219    return getBlockAddress() == Other.getBlockAddress();
220  case MO_RegisterMask:
221    return getRegMask() == Other.getRegMask();
222  case MachineOperand::MO_MCSymbol:
223    return getMCSymbol() == Other.getMCSymbol();
224  case MachineOperand::MO_Metadata:
225    return getMetadata() == Other.getMetadata();
226  }
227  llvm_unreachable("Invalid machine operand type");
228}
229
230/// print - Print the specified machine operand.
231///
232void MachineOperand::print(raw_ostream &OS, const TargetMachine *TM) const {
233  // If the instruction is embedded into a basic block, we can find the
234  // target info for the instruction.
235  if (!TM)
236    if (const MachineInstr *MI = getParent())
237      if (const MachineBasicBlock *MBB = MI->getParent())
238        if (const MachineFunction *MF = MBB->getParent())
239          TM = &MF->getTarget();
240  const TargetRegisterInfo *TRI = TM ? TM->getRegisterInfo() : 0;
241
242  switch (getType()) {
243  case MachineOperand::MO_Register:
244    OS << PrintReg(getReg(), TRI, getSubReg());
245
246    if (isDef() || isKill() || isDead() || isImplicit() || isUndef() ||
247        isInternalRead() || isEarlyClobber()) {
248      OS << '<';
249      bool NeedComma = false;
250      if (isDef()) {
251        if (NeedComma) OS << ',';
252        if (isEarlyClobber())
253          OS << "earlyclobber,";
254        if (isImplicit())
255          OS << "imp-";
256        OS << "def";
257        NeedComma = true;
258      } else if (isImplicit()) {
259          OS << "imp-use";
260          NeedComma = true;
261      }
262
263      if (isKill() || isDead() || isUndef() || isInternalRead()) {
264        if (NeedComma) OS << ',';
265        NeedComma = false;
266        if (isKill()) {
267          OS << "kill";
268          NeedComma = true;
269        }
270        if (isDead()) {
271          OS << "dead";
272          NeedComma = true;
273        }
274        if (isUndef()) {
275          if (NeedComma) OS << ',';
276          OS << "undef";
277          NeedComma = true;
278        }
279        if (isInternalRead()) {
280          if (NeedComma) OS << ',';
281          OS << "internal";
282          NeedComma = true;
283        }
284      }
285      OS << '>';
286    }
287    break;
288  case MachineOperand::MO_Immediate:
289    OS << getImm();
290    break;
291  case MachineOperand::MO_CImmediate:
292    getCImm()->getValue().print(OS, false);
293    break;
294  case MachineOperand::MO_FPImmediate:
295    if (getFPImm()->getType()->isFloatTy())
296      OS << getFPImm()->getValueAPF().convertToFloat();
297    else
298      OS << getFPImm()->getValueAPF().convertToDouble();
299    break;
300  case MachineOperand::MO_MachineBasicBlock:
301    OS << "<BB#" << getMBB()->getNumber() << ">";
302    break;
303  case MachineOperand::MO_FrameIndex:
304    OS << "<fi#" << getIndex() << '>';
305    break;
306  case MachineOperand::MO_ConstantPoolIndex:
307    OS << "<cp#" << getIndex();
308    if (getOffset()) OS << "+" << getOffset();
309    OS << '>';
310    break;
311  case MachineOperand::MO_JumpTableIndex:
312    OS << "<jt#" << getIndex() << '>';
313    break;
314  case MachineOperand::MO_GlobalAddress:
315    OS << "<ga:";
316    WriteAsOperand(OS, getGlobal(), /*PrintType=*/false);
317    if (getOffset()) OS << "+" << getOffset();
318    OS << '>';
319    break;
320  case MachineOperand::MO_ExternalSymbol:
321    OS << "<es:" << getSymbolName();
322    if (getOffset()) OS << "+" << getOffset();
323    OS << '>';
324    break;
325  case MachineOperand::MO_BlockAddress:
326    OS << '<';
327    WriteAsOperand(OS, getBlockAddress(), /*PrintType=*/false);
328    OS << '>';
329    break;
330  case MachineOperand::MO_RegisterMask:
331    OS << "<regmask>";
332    break;
333  case MachineOperand::MO_Metadata:
334    OS << '<';
335    WriteAsOperand(OS, getMetadata(), /*PrintType=*/false);
336    OS << '>';
337    break;
338  case MachineOperand::MO_MCSymbol:
339    OS << "<MCSym=" << *getMCSymbol() << '>';
340    break;
341  }
342
343  if (unsigned TF = getTargetFlags())
344    OS << "[TF=" << TF << ']';
345}
346
347//===----------------------------------------------------------------------===//
348// MachineMemOperand Implementation
349//===----------------------------------------------------------------------===//
350
351/// getAddrSpace - Return the LLVM IR address space number that this pointer
352/// points into.
353unsigned MachinePointerInfo::getAddrSpace() const {
354  if (V == 0) return 0;
355  return cast<PointerType>(V->getType())->getAddressSpace();
356}
357
358/// getConstantPool - Return a MachinePointerInfo record that refers to the
359/// constant pool.
360MachinePointerInfo MachinePointerInfo::getConstantPool() {
361  return MachinePointerInfo(PseudoSourceValue::getConstantPool());
362}
363
364/// getFixedStack - Return a MachinePointerInfo record that refers to the
365/// the specified FrameIndex.
366MachinePointerInfo MachinePointerInfo::getFixedStack(int FI, int64_t offset) {
367  return MachinePointerInfo(PseudoSourceValue::getFixedStack(FI), offset);
368}
369
370MachinePointerInfo MachinePointerInfo::getJumpTable() {
371  return MachinePointerInfo(PseudoSourceValue::getJumpTable());
372}
373
374MachinePointerInfo MachinePointerInfo::getGOT() {
375  return MachinePointerInfo(PseudoSourceValue::getGOT());
376}
377
378MachinePointerInfo MachinePointerInfo::getStack(int64_t Offset) {
379  return MachinePointerInfo(PseudoSourceValue::getStack(), Offset);
380}
381
382MachineMemOperand::MachineMemOperand(MachinePointerInfo ptrinfo, unsigned f,
383                                     uint64_t s, unsigned int a,
384                                     const MDNode *TBAAInfo,
385                                     const MDNode *Ranges)
386  : PtrInfo(ptrinfo), Size(s),
387    Flags((f & ((1 << MOMaxBits) - 1)) | ((Log2_32(a) + 1) << MOMaxBits)),
388    TBAAInfo(TBAAInfo), Ranges(Ranges) {
389  assert((PtrInfo.V == 0 || isa<PointerType>(PtrInfo.V->getType())) &&
390         "invalid pointer value");
391  assert(getBaseAlignment() == a && "Alignment is not a power of 2!");
392  assert((isLoad() || isStore()) && "Not a load/store!");
393}
394
395/// Profile - Gather unique data for the object.
396///
397void MachineMemOperand::Profile(FoldingSetNodeID &ID) const {
398  ID.AddInteger(getOffset());
399  ID.AddInteger(Size);
400  ID.AddPointer(getValue());
401  ID.AddInteger(Flags);
402}
403
404void MachineMemOperand::refineAlignment(const MachineMemOperand *MMO) {
405  // The Value and Offset may differ due to CSE. But the flags and size
406  // should be the same.
407  assert(MMO->getFlags() == getFlags() && "Flags mismatch!");
408  assert(MMO->getSize() == getSize() && "Size mismatch!");
409
410  if (MMO->getBaseAlignment() >= getBaseAlignment()) {
411    // Update the alignment value.
412    Flags = (Flags & ((1 << MOMaxBits) - 1)) |
413      ((Log2_32(MMO->getBaseAlignment()) + 1) << MOMaxBits);
414    // Also update the base and offset, because the new alignment may
415    // not be applicable with the old ones.
416    PtrInfo = MMO->PtrInfo;
417  }
418}
419
420/// getAlignment - Return the minimum known alignment in bytes of the
421/// actual memory reference.
422uint64_t MachineMemOperand::getAlignment() const {
423  return MinAlign(getBaseAlignment(), getOffset());
424}
425
426raw_ostream &llvm::operator<<(raw_ostream &OS, const MachineMemOperand &MMO) {
427  assert((MMO.isLoad() || MMO.isStore()) &&
428         "SV has to be a load, store or both.");
429
430  if (MMO.isVolatile())
431    OS << "Volatile ";
432
433  if (MMO.isLoad())
434    OS << "LD";
435  if (MMO.isStore())
436    OS << "ST";
437  OS << MMO.getSize();
438
439  // Print the address information.
440  OS << "[";
441  if (!MMO.getValue())
442    OS << "<unknown>";
443  else
444    WriteAsOperand(OS, MMO.getValue(), /*PrintType=*/false);
445
446  // If the alignment of the memory reference itself differs from the alignment
447  // of the base pointer, print the base alignment explicitly, next to the base
448  // pointer.
449  if (MMO.getBaseAlignment() != MMO.getAlignment())
450    OS << "(align=" << MMO.getBaseAlignment() << ")";
451
452  if (MMO.getOffset() != 0)
453    OS << "+" << MMO.getOffset();
454  OS << "]";
455
456  // Print the alignment of the reference.
457  if (MMO.getBaseAlignment() != MMO.getAlignment() ||
458      MMO.getBaseAlignment() != MMO.getSize())
459    OS << "(align=" << MMO.getAlignment() << ")";
460
461  // Print TBAA info.
462  if (const MDNode *TBAAInfo = MMO.getTBAAInfo()) {
463    OS << "(tbaa=";
464    if (TBAAInfo->getNumOperands() > 0)
465      WriteAsOperand(OS, TBAAInfo->getOperand(0), /*PrintType=*/false);
466    else
467      OS << "<unknown>";
468    OS << ")";
469  }
470
471  // Print nontemporal info.
472  if (MMO.isNonTemporal())
473    OS << "(nontemporal)";
474
475  return OS;
476}
477
478//===----------------------------------------------------------------------===//
479// MachineInstr Implementation
480//===----------------------------------------------------------------------===//
481
482/// MachineInstr ctor - This constructor creates a dummy MachineInstr with
483/// MCID NULL and no operands.
484MachineInstr::MachineInstr()
485  : MCID(0), Flags(0), AsmPrinterFlags(0),
486    NumMemRefs(0), MemRefs(0),
487    Parent(0) {
488  // Make sure that we get added to a machine basicblock
489  LeakDetector::addGarbageObject(this);
490}
491
492void MachineInstr::addImplicitDefUseOperands() {
493  if (MCID->ImplicitDefs)
494    for (const uint16_t *ImpDefs = MCID->getImplicitDefs(); *ImpDefs; ++ImpDefs)
495      addOperand(MachineOperand::CreateReg(*ImpDefs, true, true));
496  if (MCID->ImplicitUses)
497    for (const uint16_t *ImpUses = MCID->getImplicitUses(); *ImpUses; ++ImpUses)
498      addOperand(MachineOperand::CreateReg(*ImpUses, false, true));
499}
500
501/// MachineInstr ctor - This constructor creates a MachineInstr and adds the
502/// implicit operands. It reserves space for the number of operands specified by
503/// the MCInstrDesc.
504MachineInstr::MachineInstr(const MCInstrDesc &tid, bool NoImp)
505  : MCID(&tid), Flags(0), AsmPrinterFlags(0),
506    NumMemRefs(0), MemRefs(0), Parent(0) {
507  unsigned NumImplicitOps = 0;
508  if (!NoImp)
509    NumImplicitOps = MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
510  Operands.reserve(NumImplicitOps + MCID->getNumOperands());
511  if (!NoImp)
512    addImplicitDefUseOperands();
513  // Make sure that we get added to a machine basicblock
514  LeakDetector::addGarbageObject(this);
515}
516
517/// MachineInstr ctor - As above, but with a DebugLoc.
518MachineInstr::MachineInstr(const MCInstrDesc &tid, const DebugLoc dl,
519                           bool NoImp)
520  : MCID(&tid), Flags(0), AsmPrinterFlags(0),
521    NumMemRefs(0), MemRefs(0), Parent(0), debugLoc(dl) {
522  unsigned NumImplicitOps = 0;
523  if (!NoImp)
524    NumImplicitOps = MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
525  Operands.reserve(NumImplicitOps + MCID->getNumOperands());
526  if (!NoImp)
527    addImplicitDefUseOperands();
528  // Make sure that we get added to a machine basicblock
529  LeakDetector::addGarbageObject(this);
530}
531
532/// MachineInstr ctor - Work exactly the same as the ctor two above, except
533/// that the MachineInstr is created and added to the end of the specified
534/// basic block.
535MachineInstr::MachineInstr(MachineBasicBlock *MBB, const MCInstrDesc &tid)
536  : MCID(&tid), Flags(0), AsmPrinterFlags(0),
537    NumMemRefs(0), MemRefs(0), Parent(0) {
538  assert(MBB && "Cannot use inserting ctor with null basic block!");
539  unsigned NumImplicitOps =
540    MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
541  Operands.reserve(NumImplicitOps + MCID->getNumOperands());
542  addImplicitDefUseOperands();
543  // Make sure that we get added to a machine basicblock
544  LeakDetector::addGarbageObject(this);
545  MBB->push_back(this);  // Add instruction to end of basic block!
546}
547
548/// MachineInstr ctor - As above, but with a DebugLoc.
549///
550MachineInstr::MachineInstr(MachineBasicBlock *MBB, const DebugLoc dl,
551                           const MCInstrDesc &tid)
552  : MCID(&tid), Flags(0), AsmPrinterFlags(0),
553    NumMemRefs(0), MemRefs(0), Parent(0), debugLoc(dl) {
554  assert(MBB && "Cannot use inserting ctor with null basic block!");
555  unsigned NumImplicitOps =
556    MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
557  Operands.reserve(NumImplicitOps + MCID->getNumOperands());
558  addImplicitDefUseOperands();
559  // Make sure that we get added to a machine basicblock
560  LeakDetector::addGarbageObject(this);
561  MBB->push_back(this);  // Add instruction to end of basic block!
562}
563
564/// MachineInstr ctor - Copies MachineInstr arg exactly
565///
566MachineInstr::MachineInstr(MachineFunction &MF, const MachineInstr &MI)
567  : MCID(&MI.getDesc()), Flags(0), AsmPrinterFlags(0),
568    NumMemRefs(MI.NumMemRefs), MemRefs(MI.MemRefs),
569    Parent(0), debugLoc(MI.getDebugLoc()) {
570  Operands.reserve(MI.getNumOperands());
571
572  // Add operands
573  for (unsigned i = 0; i != MI.getNumOperands(); ++i)
574    addOperand(MI.getOperand(i));
575
576  // Copy all the flags.
577  Flags = MI.Flags;
578
579  // Set parent to null.
580  Parent = 0;
581
582  LeakDetector::addGarbageObject(this);
583}
584
585MachineInstr::~MachineInstr() {
586  LeakDetector::removeGarbageObject(this);
587#ifndef NDEBUG
588  for (unsigned i = 0, e = Operands.size(); i != e; ++i) {
589    assert(Operands[i].ParentMI == this && "ParentMI mismatch!");
590    assert((!Operands[i].isReg() || !Operands[i].isOnRegUseList()) &&
591           "Reg operand def/use list corrupted");
592  }
593#endif
594}
595
596/// getRegInfo - If this instruction is embedded into a MachineFunction,
597/// return the MachineRegisterInfo object for the current function, otherwise
598/// return null.
599MachineRegisterInfo *MachineInstr::getRegInfo() {
600  if (MachineBasicBlock *MBB = getParent())
601    return &MBB->getParent()->getRegInfo();
602  return 0;
603}
604
605/// RemoveRegOperandsFromUseLists - Unlink all of the register operands in
606/// this instruction from their respective use lists.  This requires that the
607/// operands already be on their use lists.
608void MachineInstr::RemoveRegOperandsFromUseLists() {
609  for (unsigned i = 0, e = Operands.size(); i != e; ++i) {
610    if (Operands[i].isReg())
611      Operands[i].RemoveRegOperandFromRegInfo();
612  }
613}
614
615/// AddRegOperandsToUseLists - Add all of the register operands in
616/// this instruction from their respective use lists.  This requires that the
617/// operands not be on their use lists yet.
618void MachineInstr::AddRegOperandsToUseLists(MachineRegisterInfo &RegInfo) {
619  for (unsigned i = 0, e = Operands.size(); i != e; ++i) {
620    if (Operands[i].isReg())
621      Operands[i].AddRegOperandToRegInfo(&RegInfo);
622  }
623}
624
625
626/// addOperand - Add the specified operand to the instruction.  If it is an
627/// implicit operand, it is added to the end of the operand list.  If it is
628/// an explicit operand it is added at the end of the explicit operand list
629/// (before the first implicit operand).
630void MachineInstr::addOperand(const MachineOperand &Op) {
631  assert(MCID && "Cannot add operands before providing an instr descriptor");
632  bool isImpReg = Op.isReg() && Op.isImplicit();
633  MachineRegisterInfo *RegInfo = getRegInfo();
634
635  // If the Operands backing store is reallocated, all register operands must
636  // be removed and re-added to RegInfo.  It is storing pointers to operands.
637  bool Reallocate = RegInfo &&
638    !Operands.empty() && Operands.size() == Operands.capacity();
639
640  // Find the insert location for the new operand.  Implicit registers go at
641  // the end, everything goes before the implicit regs.
642  unsigned OpNo = Operands.size();
643
644  // Remove all the implicit operands from RegInfo if they need to be shifted.
645  // FIXME: Allow mixed explicit and implicit operands on inline asm.
646  // InstrEmitter::EmitSpecialNode() is marking inline asm clobbers as
647  // implicit-defs, but they must not be moved around.  See the FIXME in
648  // InstrEmitter.cpp.
649  if (!isImpReg && !isInlineAsm()) {
650    while (OpNo && Operands[OpNo-1].isReg() && Operands[OpNo-1].isImplicit()) {
651      --OpNo;
652      if (RegInfo)
653        Operands[OpNo].RemoveRegOperandFromRegInfo();
654    }
655  }
656
657  // OpNo now points as the desired insertion point.  Unless this is a variadic
658  // instruction, only implicit regs are allowed beyond MCID->getNumOperands().
659  assert((isImpReg || MCID->isVariadic() || OpNo < MCID->getNumOperands()) &&
660         "Trying to add an operand to a machine instr that is already done!");
661
662  // All operands from OpNo have been removed from RegInfo.  If the Operands
663  // backing store needs to be reallocated, we also need to remove any other
664  // register operands.
665  if (Reallocate)
666    for (unsigned i = 0; i != OpNo; ++i)
667      if (Operands[i].isReg())
668        Operands[i].RemoveRegOperandFromRegInfo();
669
670  // Insert the new operand at OpNo.
671  Operands.insert(Operands.begin() + OpNo, Op);
672  Operands[OpNo].ParentMI = this;
673
674  // The Operands backing store has now been reallocated, so we can re-add the
675  // operands before OpNo.
676  if (Reallocate)
677    for (unsigned i = 0; i != OpNo; ++i)
678      if (Operands[i].isReg())
679        Operands[i].AddRegOperandToRegInfo(RegInfo);
680
681  // When adding a register operand, tell RegInfo about it.
682  if (Operands[OpNo].isReg()) {
683    // Add the new operand to RegInfo, even when RegInfo is NULL.
684    // This will initialize the linked list pointers.
685    Operands[OpNo].AddRegOperandToRegInfo(RegInfo);
686    // If the register operand is flagged as early, mark the operand as such.
687    if (MCID->getOperandConstraint(OpNo, MCOI::EARLY_CLOBBER) != -1)
688      Operands[OpNo].setIsEarlyClobber(true);
689  }
690
691  // Re-add all the implicit ops.
692  if (RegInfo) {
693    for (unsigned i = OpNo + 1, e = Operands.size(); i != e; ++i) {
694      assert(Operands[i].isReg() && "Should only be an implicit reg!");
695      Operands[i].AddRegOperandToRegInfo(RegInfo);
696    }
697  }
698}
699
700/// RemoveOperand - Erase an operand  from an instruction, leaving it with one
701/// fewer operand than it started with.
702///
703void MachineInstr::RemoveOperand(unsigned OpNo) {
704  assert(OpNo < Operands.size() && "Invalid operand number");
705
706  // Special case removing the last one.
707  if (OpNo == Operands.size()-1) {
708    // If needed, remove from the reg def/use list.
709    if (Operands.back().isReg() && Operands.back().isOnRegUseList())
710      Operands.back().RemoveRegOperandFromRegInfo();
711
712    Operands.pop_back();
713    return;
714  }
715
716  // Otherwise, we are removing an interior operand.  If we have reginfo to
717  // update, remove all operands that will be shifted down from their reg lists,
718  // move everything down, then re-add them.
719  MachineRegisterInfo *RegInfo = getRegInfo();
720  if (RegInfo) {
721    for (unsigned i = OpNo, e = Operands.size(); i != e; ++i) {
722      if (Operands[i].isReg())
723        Operands[i].RemoveRegOperandFromRegInfo();
724    }
725  }
726
727  Operands.erase(Operands.begin()+OpNo);
728
729  if (RegInfo) {
730    for (unsigned i = OpNo, e = Operands.size(); i != e; ++i) {
731      if (Operands[i].isReg())
732        Operands[i].AddRegOperandToRegInfo(RegInfo);
733    }
734  }
735}
736
737/// addMemOperand - Add a MachineMemOperand to the machine instruction.
738/// This function should be used only occasionally. The setMemRefs function
739/// is the primary method for setting up a MachineInstr's MemRefs list.
740void MachineInstr::addMemOperand(MachineFunction &MF,
741                                 MachineMemOperand *MO) {
742  mmo_iterator OldMemRefs = MemRefs;
743  uint16_t OldNumMemRefs = NumMemRefs;
744
745  uint16_t NewNum = NumMemRefs + 1;
746  mmo_iterator NewMemRefs = MF.allocateMemRefsArray(NewNum);
747
748  std::copy(OldMemRefs, OldMemRefs + OldNumMemRefs, NewMemRefs);
749  NewMemRefs[NewNum - 1] = MO;
750
751  MemRefs = NewMemRefs;
752  NumMemRefs = NewNum;
753}
754
755bool MachineInstr::hasPropertyInBundle(unsigned Mask, QueryType Type) const {
756  const MachineBasicBlock *MBB = getParent();
757  MachineBasicBlock::const_instr_iterator MII = *this; ++MII;
758  while (MII != MBB->end() && MII->isInsideBundle()) {
759    if (MII->getDesc().getFlags() & Mask) {
760      if (Type == AnyInBundle)
761        return true;
762    } else {
763      if (Type == AllInBundle)
764        return false;
765    }
766    ++MII;
767  }
768
769  return Type == AllInBundle;
770}
771
772bool MachineInstr::isIdenticalTo(const MachineInstr *Other,
773                                 MICheckType Check) const {
774  // If opcodes or number of operands are not the same then the two
775  // instructions are obviously not identical.
776  if (Other->getOpcode() != getOpcode() ||
777      Other->getNumOperands() != getNumOperands())
778    return false;
779
780  if (isBundle()) {
781    // Both instructions are bundles, compare MIs inside the bundle.
782    MachineBasicBlock::const_instr_iterator I1 = *this;
783    MachineBasicBlock::const_instr_iterator E1 = getParent()->instr_end();
784    MachineBasicBlock::const_instr_iterator I2 = *Other;
785    MachineBasicBlock::const_instr_iterator E2= Other->getParent()->instr_end();
786    while (++I1 != E1 && I1->isInsideBundle()) {
787      ++I2;
788      if (I2 == E2 || !I2->isInsideBundle() || !I1->isIdenticalTo(I2, Check))
789        return false;
790    }
791  }
792
793  // Check operands to make sure they match.
794  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
795    const MachineOperand &MO = getOperand(i);
796    const MachineOperand &OMO = Other->getOperand(i);
797    if (!MO.isReg()) {
798      if (!MO.isIdenticalTo(OMO))
799        return false;
800      continue;
801    }
802
803    // Clients may or may not want to ignore defs when testing for equality.
804    // For example, machine CSE pass only cares about finding common
805    // subexpressions, so it's safe to ignore virtual register defs.
806    if (MO.isDef()) {
807      if (Check == IgnoreDefs)
808        continue;
809      else if (Check == IgnoreVRegDefs) {
810        if (TargetRegisterInfo::isPhysicalRegister(MO.getReg()) ||
811            TargetRegisterInfo::isPhysicalRegister(OMO.getReg()))
812          if (MO.getReg() != OMO.getReg())
813            return false;
814      } else {
815        if (!MO.isIdenticalTo(OMO))
816          return false;
817        if (Check == CheckKillDead && MO.isDead() != OMO.isDead())
818          return false;
819      }
820    } else {
821      if (!MO.isIdenticalTo(OMO))
822        return false;
823      if (Check == CheckKillDead && MO.isKill() != OMO.isKill())
824        return false;
825    }
826  }
827  // If DebugLoc does not match then two dbg.values are not identical.
828  if (isDebugValue())
829    if (!getDebugLoc().isUnknown() && !Other->getDebugLoc().isUnknown()
830        && getDebugLoc() != Other->getDebugLoc())
831      return false;
832  return true;
833}
834
835/// removeFromParent - This method unlinks 'this' from the containing basic
836/// block, and returns it, but does not delete it.
837MachineInstr *MachineInstr::removeFromParent() {
838  assert(getParent() && "Not embedded in a basic block!");
839
840  // If it's a bundle then remove the MIs inside the bundle as well.
841  if (isBundle()) {
842    MachineBasicBlock *MBB = getParent();
843    MachineBasicBlock::instr_iterator MII = *this; ++MII;
844    MachineBasicBlock::instr_iterator E = MBB->instr_end();
845    while (MII != E && MII->isInsideBundle()) {
846      MachineInstr *MI = &*MII;
847      ++MII;
848      MBB->remove(MI);
849    }
850  }
851  getParent()->remove(this);
852  return this;
853}
854
855
856/// eraseFromParent - This method unlinks 'this' from the containing basic
857/// block, and deletes it.
858void MachineInstr::eraseFromParent() {
859  assert(getParent() && "Not embedded in a basic block!");
860  // If it's a bundle then remove the MIs inside the bundle as well.
861  if (isBundle()) {
862    MachineBasicBlock *MBB = getParent();
863    MachineBasicBlock::instr_iterator MII = *this; ++MII;
864    MachineBasicBlock::instr_iterator E = MBB->instr_end();
865    while (MII != E && MII->isInsideBundle()) {
866      MachineInstr *MI = &*MII;
867      ++MII;
868      MBB->erase(MI);
869    }
870  }
871  getParent()->erase(this);
872}
873
874
875/// getNumExplicitOperands - Returns the number of non-implicit operands.
876///
877unsigned MachineInstr::getNumExplicitOperands() const {
878  unsigned NumOperands = MCID->getNumOperands();
879  if (!MCID->isVariadic())
880    return NumOperands;
881
882  for (unsigned i = NumOperands, e = getNumOperands(); i != e; ++i) {
883    const MachineOperand &MO = getOperand(i);
884    if (!MO.isReg() || !MO.isImplicit())
885      NumOperands++;
886  }
887  return NumOperands;
888}
889
890/// isBundled - Return true if this instruction part of a bundle. This is true
891/// if either itself or its following instruction is marked "InsideBundle".
892bool MachineInstr::isBundled() const {
893  if (isInsideBundle())
894    return true;
895  MachineBasicBlock::const_instr_iterator nextMI = this;
896  ++nextMI;
897  return nextMI != Parent->instr_end() && nextMI->isInsideBundle();
898}
899
900bool MachineInstr::isStackAligningInlineAsm() const {
901  if (isInlineAsm()) {
902    unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm();
903    if (ExtraInfo & InlineAsm::Extra_IsAlignStack)
904      return true;
905  }
906  return false;
907}
908
909int MachineInstr::findInlineAsmFlagIdx(unsigned OpIdx,
910                                       unsigned *GroupNo) const {
911  assert(isInlineAsm() && "Expected an inline asm instruction");
912  assert(OpIdx < getNumOperands() && "OpIdx out of range");
913
914  // Ignore queries about the initial operands.
915  if (OpIdx < InlineAsm::MIOp_FirstOperand)
916    return -1;
917
918  unsigned Group = 0;
919  unsigned NumOps;
920  for (unsigned i = InlineAsm::MIOp_FirstOperand, e = getNumOperands(); i < e;
921       i += NumOps) {
922    const MachineOperand &FlagMO = getOperand(i);
923    // If we reach the implicit register operands, stop looking.
924    if (!FlagMO.isImm())
925      return -1;
926    NumOps = 1 + InlineAsm::getNumOperandRegisters(FlagMO.getImm());
927    if (i + NumOps > OpIdx) {
928      if (GroupNo)
929        *GroupNo = Group;
930      return i;
931    }
932    ++Group;
933  }
934  return -1;
935}
936
937const TargetRegisterClass*
938MachineInstr::getRegClassConstraint(unsigned OpIdx,
939                                    const TargetInstrInfo *TII,
940                                    const TargetRegisterInfo *TRI) const {
941  // Most opcodes have fixed constraints in their MCInstrDesc.
942  if (!isInlineAsm())
943    return TII->getRegClass(getDesc(), OpIdx, TRI);
944
945  if (!getOperand(OpIdx).isReg())
946    return NULL;
947
948  // For tied uses on inline asm, get the constraint from the def.
949  unsigned DefIdx;
950  if (getOperand(OpIdx).isUse() && isRegTiedToDefOperand(OpIdx, &DefIdx))
951    OpIdx = DefIdx;
952
953  // Inline asm stores register class constraints in the flag word.
954  int FlagIdx = findInlineAsmFlagIdx(OpIdx);
955  if (FlagIdx < 0)
956    return NULL;
957
958  unsigned Flag = getOperand(FlagIdx).getImm();
959  unsigned RCID;
960  if (InlineAsm::hasRegClassConstraint(Flag, RCID))
961    return TRI->getRegClass(RCID);
962
963  // Assume that all registers in a memory operand are pointers.
964  if (InlineAsm::getKind(Flag) == InlineAsm::Kind_Mem)
965    return TRI->getPointerRegClass();
966
967  return NULL;
968}
969
970/// getBundleSize - Return the number of instructions inside the MI bundle.
971unsigned MachineInstr::getBundleSize() const {
972  assert(isBundle() && "Expecting a bundle");
973
974  MachineBasicBlock::const_instr_iterator I = *this;
975  unsigned Size = 0;
976  while ((++I)->isInsideBundle()) {
977    ++Size;
978  }
979  assert(Size > 1 && "Malformed bundle");
980
981  return Size;
982}
983
984/// findRegisterUseOperandIdx() - Returns the MachineOperand that is a use of
985/// the specific register or -1 if it is not found. It further tightens
986/// the search criteria to a use that kills the register if isKill is true.
987int MachineInstr::findRegisterUseOperandIdx(unsigned Reg, bool isKill,
988                                          const TargetRegisterInfo *TRI) const {
989  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
990    const MachineOperand &MO = getOperand(i);
991    if (!MO.isReg() || !MO.isUse())
992      continue;
993    unsigned MOReg = MO.getReg();
994    if (!MOReg)
995      continue;
996    if (MOReg == Reg ||
997        (TRI &&
998         TargetRegisterInfo::isPhysicalRegister(MOReg) &&
999         TargetRegisterInfo::isPhysicalRegister(Reg) &&
1000         TRI->isSubRegister(MOReg, Reg)))
1001      if (!isKill || MO.isKill())
1002        return i;
1003  }
1004  return -1;
1005}
1006
1007/// readsWritesVirtualRegister - Return a pair of bools (reads, writes)
1008/// indicating if this instruction reads or writes Reg. This also considers
1009/// partial defines.
1010std::pair<bool,bool>
1011MachineInstr::readsWritesVirtualRegister(unsigned Reg,
1012                                         SmallVectorImpl<unsigned> *Ops) const {
1013  bool PartDef = false; // Partial redefine.
1014  bool FullDef = false; // Full define.
1015  bool Use = false;
1016
1017  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1018    const MachineOperand &MO = getOperand(i);
1019    if (!MO.isReg() || MO.getReg() != Reg)
1020      continue;
1021    if (Ops)
1022      Ops->push_back(i);
1023    if (MO.isUse())
1024      Use |= !MO.isUndef();
1025    else if (MO.getSubReg() && !MO.isUndef())
1026      // A partial <def,undef> doesn't count as reading the register.
1027      PartDef = true;
1028    else
1029      FullDef = true;
1030  }
1031  // A partial redefine uses Reg unless there is also a full define.
1032  return std::make_pair(Use || (PartDef && !FullDef), PartDef || FullDef);
1033}
1034
1035/// findRegisterDefOperandIdx() - Returns the operand index that is a def of
1036/// the specified register or -1 if it is not found. If isDead is true, defs
1037/// that are not dead are skipped. If TargetRegisterInfo is non-null, then it
1038/// also checks if there is a def of a super-register.
1039int
1040MachineInstr::findRegisterDefOperandIdx(unsigned Reg, bool isDead, bool Overlap,
1041                                        const TargetRegisterInfo *TRI) const {
1042  bool isPhys = TargetRegisterInfo::isPhysicalRegister(Reg);
1043  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1044    const MachineOperand &MO = getOperand(i);
1045    // Accept regmask operands when Overlap is set.
1046    // Ignore them when looking for a specific def operand (Overlap == false).
1047    if (isPhys && Overlap && MO.isRegMask() && MO.clobbersPhysReg(Reg))
1048      return i;
1049    if (!MO.isReg() || !MO.isDef())
1050      continue;
1051    unsigned MOReg = MO.getReg();
1052    bool Found = (MOReg == Reg);
1053    if (!Found && TRI && isPhys &&
1054        TargetRegisterInfo::isPhysicalRegister(MOReg)) {
1055      if (Overlap)
1056        Found = TRI->regsOverlap(MOReg, Reg);
1057      else
1058        Found = TRI->isSubRegister(MOReg, Reg);
1059    }
1060    if (Found && (!isDead || MO.isDead()))
1061      return i;
1062  }
1063  return -1;
1064}
1065
1066/// findFirstPredOperandIdx() - Find the index of the first operand in the
1067/// operand list that is used to represent the predicate. It returns -1 if
1068/// none is found.
1069int MachineInstr::findFirstPredOperandIdx() const {
1070  // Don't call MCID.findFirstPredOperandIdx() because this variant
1071  // is sometimes called on an instruction that's not yet complete, and
1072  // so the number of operands is less than the MCID indicates. In
1073  // particular, the PTX target does this.
1074  const MCInstrDesc &MCID = getDesc();
1075  if (MCID.isPredicable()) {
1076    for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
1077      if (MCID.OpInfo[i].isPredicate())
1078        return i;
1079  }
1080
1081  return -1;
1082}
1083
1084/// isRegTiedToUseOperand - Given the index of a register def operand,
1085/// check if the register def is tied to a source operand, due to either
1086/// two-address elimination or inline assembly constraints. Returns the
1087/// first tied use operand index by reference is UseOpIdx is not null.
1088bool MachineInstr::
1089isRegTiedToUseOperand(unsigned DefOpIdx, unsigned *UseOpIdx) const {
1090  if (isInlineAsm()) {
1091    assert(DefOpIdx > InlineAsm::MIOp_FirstOperand);
1092    const MachineOperand &MO = getOperand(DefOpIdx);
1093    if (!MO.isReg() || !MO.isDef() || MO.getReg() == 0)
1094      return false;
1095    // Determine the actual operand index that corresponds to this index.
1096    unsigned DefNo = 0;
1097    int FlagIdx = findInlineAsmFlagIdx(DefOpIdx, &DefNo);
1098    if (FlagIdx < 0)
1099      return false;
1100
1101    // Which part of the group is DefOpIdx?
1102    unsigned DefPart = DefOpIdx - (FlagIdx + 1);
1103
1104    for (unsigned i = InlineAsm::MIOp_FirstOperand, e = getNumOperands();
1105         i != e; ++i) {
1106      const MachineOperand &FMO = getOperand(i);
1107      if (!FMO.isImm())
1108        continue;
1109      if (i+1 >= e || !getOperand(i+1).isReg() || !getOperand(i+1).isUse())
1110        continue;
1111      unsigned Idx;
1112      if (InlineAsm::isUseOperandTiedToDef(FMO.getImm(), Idx) &&
1113          Idx == DefNo) {
1114        if (UseOpIdx)
1115          *UseOpIdx = (unsigned)i + 1 + DefPart;
1116        return true;
1117      }
1118    }
1119    return false;
1120  }
1121
1122  assert(getOperand(DefOpIdx).isDef() && "DefOpIdx is not a def!");
1123  const MCInstrDesc &MCID = getDesc();
1124  for (unsigned i = 0, e = MCID.getNumOperands(); i != e; ++i) {
1125    const MachineOperand &MO = getOperand(i);
1126    if (MO.isReg() && MO.isUse() &&
1127        MCID.getOperandConstraint(i, MCOI::TIED_TO) == (int)DefOpIdx) {
1128      if (UseOpIdx)
1129        *UseOpIdx = (unsigned)i;
1130      return true;
1131    }
1132  }
1133  return false;
1134}
1135
1136/// isRegTiedToDefOperand - Return true if the operand of the specified index
1137/// is a register use and it is tied to an def operand. It also returns the def
1138/// operand index by reference.
1139bool MachineInstr::
1140isRegTiedToDefOperand(unsigned UseOpIdx, unsigned *DefOpIdx) const {
1141  if (isInlineAsm()) {
1142    const MachineOperand &MO = getOperand(UseOpIdx);
1143    if (!MO.isReg() || !MO.isUse() || MO.getReg() == 0)
1144      return false;
1145
1146    // Find the flag operand corresponding to UseOpIdx
1147    int FlagIdx = findInlineAsmFlagIdx(UseOpIdx);
1148    if (FlagIdx < 0)
1149      return false;
1150
1151    const MachineOperand &UFMO = getOperand(FlagIdx);
1152    unsigned DefNo;
1153    if (InlineAsm::isUseOperandTiedToDef(UFMO.getImm(), DefNo)) {
1154      if (!DefOpIdx)
1155        return true;
1156
1157      unsigned DefIdx = InlineAsm::MIOp_FirstOperand;
1158      // Remember to adjust the index. First operand is asm string, second is
1159      // the HasSideEffects and AlignStack bits, then there is a flag for each.
1160      while (DefNo) {
1161        const MachineOperand &FMO = getOperand(DefIdx);
1162        assert(FMO.isImm());
1163        // Skip over this def.
1164        DefIdx += InlineAsm::getNumOperandRegisters(FMO.getImm()) + 1;
1165        --DefNo;
1166      }
1167      *DefOpIdx = DefIdx + UseOpIdx - FlagIdx;
1168      return true;
1169    }
1170    return false;
1171  }
1172
1173  const MCInstrDesc &MCID = getDesc();
1174  if (UseOpIdx >= MCID.getNumOperands())
1175    return false;
1176  const MachineOperand &MO = getOperand(UseOpIdx);
1177  if (!MO.isReg() || !MO.isUse())
1178    return false;
1179  int DefIdx = MCID.getOperandConstraint(UseOpIdx, MCOI::TIED_TO);
1180  if (DefIdx == -1)
1181    return false;
1182  if (DefOpIdx)
1183    *DefOpIdx = (unsigned)DefIdx;
1184  return true;
1185}
1186
1187/// clearKillInfo - Clears kill flags on all operands.
1188///
1189void MachineInstr::clearKillInfo() {
1190  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1191    MachineOperand &MO = getOperand(i);
1192    if (MO.isReg() && MO.isUse())
1193      MO.setIsKill(false);
1194  }
1195}
1196
1197/// copyKillDeadInfo - Copies kill / dead operand properties from MI.
1198///
1199void MachineInstr::copyKillDeadInfo(const MachineInstr *MI) {
1200  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
1201    const MachineOperand &MO = MI->getOperand(i);
1202    if (!MO.isReg() || (!MO.isKill() && !MO.isDead()))
1203      continue;
1204    for (unsigned j = 0, ee = getNumOperands(); j != ee; ++j) {
1205      MachineOperand &MOp = getOperand(j);
1206      if (!MOp.isIdenticalTo(MO))
1207        continue;
1208      if (MO.isKill())
1209        MOp.setIsKill();
1210      else
1211        MOp.setIsDead();
1212      break;
1213    }
1214  }
1215}
1216
1217/// copyPredicates - Copies predicate operand(s) from MI.
1218void MachineInstr::copyPredicates(const MachineInstr *MI) {
1219  assert(!isBundle() && "MachineInstr::copyPredicates() can't handle bundles");
1220
1221  const MCInstrDesc &MCID = MI->getDesc();
1222  if (!MCID.isPredicable())
1223    return;
1224  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
1225    if (MCID.OpInfo[i].isPredicate()) {
1226      // Predicated operands must be last operands.
1227      addOperand(MI->getOperand(i));
1228    }
1229  }
1230}
1231
1232void MachineInstr::substituteRegister(unsigned FromReg,
1233                                      unsigned ToReg,
1234                                      unsigned SubIdx,
1235                                      const TargetRegisterInfo &RegInfo) {
1236  if (TargetRegisterInfo::isPhysicalRegister(ToReg)) {
1237    if (SubIdx)
1238      ToReg = RegInfo.getSubReg(ToReg, SubIdx);
1239    for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1240      MachineOperand &MO = getOperand(i);
1241      if (!MO.isReg() || MO.getReg() != FromReg)
1242        continue;
1243      MO.substPhysReg(ToReg, RegInfo);
1244    }
1245  } else {
1246    for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1247      MachineOperand &MO = getOperand(i);
1248      if (!MO.isReg() || MO.getReg() != FromReg)
1249        continue;
1250      MO.substVirtReg(ToReg, SubIdx, RegInfo);
1251    }
1252  }
1253}
1254
1255/// isSafeToMove - Return true if it is safe to move this instruction. If
1256/// SawStore is set to true, it means that there is a store (or call) between
1257/// the instruction's location and its intended destination.
1258bool MachineInstr::isSafeToMove(const TargetInstrInfo *TII,
1259                                AliasAnalysis *AA,
1260                                bool &SawStore) const {
1261  // Ignore stuff that we obviously can't move.
1262  if (mayStore() || isCall()) {
1263    SawStore = true;
1264    return false;
1265  }
1266
1267  if (isLabel() || isDebugValue() ||
1268      isTerminator() || hasUnmodeledSideEffects())
1269    return false;
1270
1271  // See if this instruction does a load.  If so, we have to guarantee that the
1272  // loaded value doesn't change between the load and the its intended
1273  // destination. The check for isInvariantLoad gives the targe the chance to
1274  // classify the load as always returning a constant, e.g. a constant pool
1275  // load.
1276  if (mayLoad() && !isInvariantLoad(AA))
1277    // Otherwise, this is a real load.  If there is a store between the load and
1278    // end of block, or if the load is volatile, we can't move it.
1279    return !SawStore && !hasVolatileMemoryRef();
1280
1281  return true;
1282}
1283
1284/// isSafeToReMat - Return true if it's safe to rematerialize the specified
1285/// instruction which defined the specified register instead of copying it.
1286bool MachineInstr::isSafeToReMat(const TargetInstrInfo *TII,
1287                                 AliasAnalysis *AA,
1288                                 unsigned DstReg) const {
1289  bool SawStore = false;
1290  if (!TII->isTriviallyReMaterializable(this, AA) ||
1291      !isSafeToMove(TII, AA, SawStore))
1292    return false;
1293  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1294    const MachineOperand &MO = getOperand(i);
1295    if (!MO.isReg())
1296      continue;
1297    // FIXME: For now, do not remat any instruction with register operands.
1298    // Later on, we can loosen the restriction is the register operands have
1299    // not been modified between the def and use. Note, this is different from
1300    // MachineSink because the code is no longer in two-address form (at least
1301    // partially).
1302    if (MO.isUse())
1303      return false;
1304    else if (!MO.isDead() && MO.getReg() != DstReg)
1305      return false;
1306  }
1307  return true;
1308}
1309
1310/// hasVolatileMemoryRef - Return true if this instruction may have a
1311/// volatile memory reference, or if the information describing the
1312/// memory reference is not available. Return false if it is known to
1313/// have no volatile memory references.
1314bool MachineInstr::hasVolatileMemoryRef() const {
1315  // An instruction known never to access memory won't have a volatile access.
1316  if (!mayStore() &&
1317      !mayLoad() &&
1318      !isCall() &&
1319      !hasUnmodeledSideEffects())
1320    return false;
1321
1322  // Otherwise, if the instruction has no memory reference information,
1323  // conservatively assume it wasn't preserved.
1324  if (memoperands_empty())
1325    return true;
1326
1327  // Check the memory reference information for volatile references.
1328  for (mmo_iterator I = memoperands_begin(), E = memoperands_end(); I != E; ++I)
1329    if ((*I)->isVolatile())
1330      return true;
1331
1332  return false;
1333}
1334
1335/// isInvariantLoad - Return true if this instruction is loading from a
1336/// location whose value is invariant across the function.  For example,
1337/// loading a value from the constant pool or from the argument area
1338/// of a function if it does not change.  This should only return true of
1339/// *all* loads the instruction does are invariant (if it does multiple loads).
1340bool MachineInstr::isInvariantLoad(AliasAnalysis *AA) const {
1341  // If the instruction doesn't load at all, it isn't an invariant load.
1342  if (!mayLoad())
1343    return false;
1344
1345  // If the instruction has lost its memoperands, conservatively assume that
1346  // it may not be an invariant load.
1347  if (memoperands_empty())
1348    return false;
1349
1350  const MachineFrameInfo *MFI = getParent()->getParent()->getFrameInfo();
1351
1352  for (mmo_iterator I = memoperands_begin(),
1353       E = memoperands_end(); I != E; ++I) {
1354    if ((*I)->isVolatile()) return false;
1355    if ((*I)->isStore()) return false;
1356    if ((*I)->isInvariant()) return true;
1357
1358    if (const Value *V = (*I)->getValue()) {
1359      // A load from a constant PseudoSourceValue is invariant.
1360      if (const PseudoSourceValue *PSV = dyn_cast<PseudoSourceValue>(V))
1361        if (PSV->isConstant(MFI))
1362          continue;
1363      // If we have an AliasAnalysis, ask it whether the memory is constant.
1364      if (AA && AA->pointsToConstantMemory(
1365                      AliasAnalysis::Location(V, (*I)->getSize(),
1366                                              (*I)->getTBAAInfo())))
1367        continue;
1368    }
1369
1370    // Otherwise assume conservatively.
1371    return false;
1372  }
1373
1374  // Everything checks out.
1375  return true;
1376}
1377
1378/// isConstantValuePHI - If the specified instruction is a PHI that always
1379/// merges together the same virtual register, return the register, otherwise
1380/// return 0.
1381unsigned MachineInstr::isConstantValuePHI() const {
1382  if (!isPHI())
1383    return 0;
1384  assert(getNumOperands() >= 3 &&
1385         "It's illegal to have a PHI without source operands");
1386
1387  unsigned Reg = getOperand(1).getReg();
1388  for (unsigned i = 3, e = getNumOperands(); i < e; i += 2)
1389    if (getOperand(i).getReg() != Reg)
1390      return 0;
1391  return Reg;
1392}
1393
1394bool MachineInstr::hasUnmodeledSideEffects() const {
1395  if (hasProperty(MCID::UnmodeledSideEffects))
1396    return true;
1397  if (isInlineAsm()) {
1398    unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm();
1399    if (ExtraInfo & InlineAsm::Extra_HasSideEffects)
1400      return true;
1401  }
1402
1403  return false;
1404}
1405
1406/// allDefsAreDead - Return true if all the defs of this instruction are dead.
1407///
1408bool MachineInstr::allDefsAreDead() const {
1409  for (unsigned i = 0, e = getNumOperands(); i < e; ++i) {
1410    const MachineOperand &MO = getOperand(i);
1411    if (!MO.isReg() || MO.isUse())
1412      continue;
1413    if (!MO.isDead())
1414      return false;
1415  }
1416  return true;
1417}
1418
1419/// copyImplicitOps - Copy implicit register operands from specified
1420/// instruction to this instruction.
1421void MachineInstr::copyImplicitOps(const MachineInstr *MI) {
1422  for (unsigned i = MI->getDesc().getNumOperands(), e = MI->getNumOperands();
1423       i != e; ++i) {
1424    const MachineOperand &MO = MI->getOperand(i);
1425    if (MO.isReg() && MO.isImplicit())
1426      addOperand(MO);
1427  }
1428}
1429
1430void MachineInstr::dump() const {
1431  dbgs() << "  " << *this;
1432}
1433
1434static void printDebugLoc(DebugLoc DL, const MachineFunction *MF,
1435                         raw_ostream &CommentOS) {
1436  const LLVMContext &Ctx = MF->getFunction()->getContext();
1437  if (!DL.isUnknown()) {          // Print source line info.
1438    DIScope Scope(DL.getScope(Ctx));
1439    // Omit the directory, because it's likely to be long and uninteresting.
1440    if (Scope.Verify())
1441      CommentOS << Scope.getFilename();
1442    else
1443      CommentOS << "<unknown>";
1444    CommentOS << ':' << DL.getLine();
1445    if (DL.getCol() != 0)
1446      CommentOS << ':' << DL.getCol();
1447    DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(DL.getInlinedAt(Ctx));
1448    if (!InlinedAtDL.isUnknown()) {
1449      CommentOS << " @[ ";
1450      printDebugLoc(InlinedAtDL, MF, CommentOS);
1451      CommentOS << " ]";
1452    }
1453  }
1454}
1455
1456void MachineInstr::print(raw_ostream &OS, const TargetMachine *TM) const {
1457  // We can be a bit tidier if we know the TargetMachine and/or MachineFunction.
1458  const MachineFunction *MF = 0;
1459  const MachineRegisterInfo *MRI = 0;
1460  if (const MachineBasicBlock *MBB = getParent()) {
1461    MF = MBB->getParent();
1462    if (!TM && MF)
1463      TM = &MF->getTarget();
1464    if (MF)
1465      MRI = &MF->getRegInfo();
1466  }
1467
1468  // Save a list of virtual registers.
1469  SmallVector<unsigned, 8> VirtRegs;
1470
1471  // Print explicitly defined operands on the left of an assignment syntax.
1472  unsigned StartOp = 0, e = getNumOperands();
1473  for (; StartOp < e && getOperand(StartOp).isReg() &&
1474         getOperand(StartOp).isDef() &&
1475         !getOperand(StartOp).isImplicit();
1476       ++StartOp) {
1477    if (StartOp != 0) OS << ", ";
1478    getOperand(StartOp).print(OS, TM);
1479    unsigned Reg = getOperand(StartOp).getReg();
1480    if (TargetRegisterInfo::isVirtualRegister(Reg))
1481      VirtRegs.push_back(Reg);
1482  }
1483
1484  if (StartOp != 0)
1485    OS << " = ";
1486
1487  // Print the opcode name.
1488  if (TM && TM->getInstrInfo())
1489    OS << TM->getInstrInfo()->getName(getOpcode());
1490  else
1491    OS << "UNKNOWN";
1492
1493  // Print the rest of the operands.
1494  bool OmittedAnyCallClobbers = false;
1495  bool FirstOp = true;
1496  unsigned AsmDescOp = ~0u;
1497  unsigned AsmOpCount = 0;
1498
1499  if (isInlineAsm() && e >= InlineAsm::MIOp_FirstOperand) {
1500    // Print asm string.
1501    OS << " ";
1502    getOperand(InlineAsm::MIOp_AsmString).print(OS, TM);
1503
1504    // Print HasSideEffects, IsAlignStack
1505    unsigned ExtraInfo = getOperand(InlineAsm::MIOp_ExtraInfo).getImm();
1506    if (ExtraInfo & InlineAsm::Extra_HasSideEffects)
1507      OS << " [sideeffect]";
1508    if (ExtraInfo & InlineAsm::Extra_IsAlignStack)
1509      OS << " [alignstack]";
1510
1511    StartOp = AsmDescOp = InlineAsm::MIOp_FirstOperand;
1512    FirstOp = false;
1513  }
1514
1515
1516  for (unsigned i = StartOp, e = getNumOperands(); i != e; ++i) {
1517    const MachineOperand &MO = getOperand(i);
1518
1519    if (MO.isReg() && TargetRegisterInfo::isVirtualRegister(MO.getReg()))
1520      VirtRegs.push_back(MO.getReg());
1521
1522    // Omit call-clobbered registers which aren't used anywhere. This makes
1523    // call instructions much less noisy on targets where calls clobber lots
1524    // of registers. Don't rely on MO.isDead() because we may be called before
1525    // LiveVariables is run, or we may be looking at a non-allocatable reg.
1526    if (MF && isCall() &&
1527        MO.isReg() && MO.isImplicit() && MO.isDef()) {
1528      unsigned Reg = MO.getReg();
1529      if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
1530        const MachineRegisterInfo &MRI = MF->getRegInfo();
1531        if (MRI.use_empty(Reg) && !MRI.isLiveOut(Reg)) {
1532          bool HasAliasLive = false;
1533          for (const uint16_t *Alias = TM->getRegisterInfo()->getAliasSet(Reg);
1534               unsigned AliasReg = *Alias; ++Alias)
1535            if (!MRI.use_empty(AliasReg) || MRI.isLiveOut(AliasReg)) {
1536              HasAliasLive = true;
1537              break;
1538            }
1539          if (!HasAliasLive) {
1540            OmittedAnyCallClobbers = true;
1541            continue;
1542          }
1543        }
1544      }
1545    }
1546
1547    if (FirstOp) FirstOp = false; else OS << ",";
1548    OS << " ";
1549    if (i < getDesc().NumOperands) {
1550      const MCOperandInfo &MCOI = getDesc().OpInfo[i];
1551      if (MCOI.isPredicate())
1552        OS << "pred:";
1553      if (MCOI.isOptionalDef())
1554        OS << "opt:";
1555    }
1556    if (isDebugValue() && MO.isMetadata()) {
1557      // Pretty print DBG_VALUE instructions.
1558      const MDNode *MD = MO.getMetadata();
1559      if (const MDString *MDS = dyn_cast<MDString>(MD->getOperand(2)))
1560        OS << "!\"" << MDS->getString() << '\"';
1561      else
1562        MO.print(OS, TM);
1563    } else if (TM && (isInsertSubreg() || isRegSequence()) && MO.isImm()) {
1564      OS << TM->getRegisterInfo()->getSubRegIndexName(MO.getImm());
1565    } else if (i == AsmDescOp && MO.isImm()) {
1566      // Pretty print the inline asm operand descriptor.
1567      OS << '$' << AsmOpCount++;
1568      unsigned Flag = MO.getImm();
1569      switch (InlineAsm::getKind(Flag)) {
1570      case InlineAsm::Kind_RegUse:             OS << ":[reguse"; break;
1571      case InlineAsm::Kind_RegDef:             OS << ":[regdef"; break;
1572      case InlineAsm::Kind_RegDefEarlyClobber: OS << ":[regdef-ec"; break;
1573      case InlineAsm::Kind_Clobber:            OS << ":[clobber"; break;
1574      case InlineAsm::Kind_Imm:                OS << ":[imm"; break;
1575      case InlineAsm::Kind_Mem:                OS << ":[mem"; break;
1576      default: OS << ":[??" << InlineAsm::getKind(Flag); break;
1577      }
1578
1579      unsigned RCID = 0;
1580      if (InlineAsm::hasRegClassConstraint(Flag, RCID)) {
1581        if (TM)
1582          OS << ':' << TM->getRegisterInfo()->getRegClass(RCID)->getName();
1583        else
1584          OS << ":RC" << RCID;
1585      }
1586
1587      unsigned TiedTo = 0;
1588      if (InlineAsm::isUseOperandTiedToDef(Flag, TiedTo))
1589        OS << " tiedto:$" << TiedTo;
1590
1591      OS << ']';
1592
1593      // Compute the index of the next operand descriptor.
1594      AsmDescOp += 1 + InlineAsm::getNumOperandRegisters(Flag);
1595    } else
1596      MO.print(OS, TM);
1597  }
1598
1599  // Briefly indicate whether any call clobbers were omitted.
1600  if (OmittedAnyCallClobbers) {
1601    if (!FirstOp) OS << ",";
1602    OS << " ...";
1603  }
1604
1605  bool HaveSemi = false;
1606  if (Flags) {
1607    if (!HaveSemi) OS << ";"; HaveSemi = true;
1608    OS << " flags: ";
1609
1610    if (Flags & FrameSetup)
1611      OS << "FrameSetup";
1612  }
1613
1614  if (!memoperands_empty()) {
1615    if (!HaveSemi) OS << ";"; HaveSemi = true;
1616
1617    OS << " mem:";
1618    for (mmo_iterator i = memoperands_begin(), e = memoperands_end();
1619         i != e; ++i) {
1620      OS << **i;
1621      if (llvm::next(i) != e)
1622        OS << " ";
1623    }
1624  }
1625
1626  // Print the regclass of any virtual registers encountered.
1627  if (MRI && !VirtRegs.empty()) {
1628    if (!HaveSemi) OS << ";"; HaveSemi = true;
1629    for (unsigned i = 0; i != VirtRegs.size(); ++i) {
1630      const TargetRegisterClass *RC = MRI->getRegClass(VirtRegs[i]);
1631      OS << " " << RC->getName() << ':' << PrintReg(VirtRegs[i]);
1632      for (unsigned j = i+1; j != VirtRegs.size();) {
1633        if (MRI->getRegClass(VirtRegs[j]) != RC) {
1634          ++j;
1635          continue;
1636        }
1637        if (VirtRegs[i] != VirtRegs[j])
1638          OS << "," << PrintReg(VirtRegs[j]);
1639        VirtRegs.erase(VirtRegs.begin()+j);
1640      }
1641    }
1642  }
1643
1644  // Print debug location information.
1645  if (isDebugValue() && getOperand(e - 1).isMetadata()) {
1646    if (!HaveSemi) OS << ";"; HaveSemi = true;
1647    DIVariable DV(getOperand(e - 1).getMetadata());
1648    OS << " line no:" <<  DV.getLineNumber();
1649    if (MDNode *InlinedAt = DV.getInlinedAt()) {
1650      DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(InlinedAt);
1651      if (!InlinedAtDL.isUnknown()) {
1652        OS << " inlined @[ ";
1653        printDebugLoc(InlinedAtDL, MF, OS);
1654        OS << " ]";
1655      }
1656    }
1657  } else if (!debugLoc.isUnknown() && MF) {
1658    if (!HaveSemi) OS << ";"; HaveSemi = true;
1659    OS << " dbg:";
1660    printDebugLoc(debugLoc, MF, OS);
1661  }
1662
1663  OS << '\n';
1664}
1665
1666bool MachineInstr::addRegisterKilled(unsigned IncomingReg,
1667                                     const TargetRegisterInfo *RegInfo,
1668                                     bool AddIfNotFound) {
1669  bool isPhysReg = TargetRegisterInfo::isPhysicalRegister(IncomingReg);
1670  bool hasAliases = isPhysReg && RegInfo->getAliasSet(IncomingReg);
1671  bool Found = false;
1672  SmallVector<unsigned,4> DeadOps;
1673  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1674    MachineOperand &MO = getOperand(i);
1675    if (!MO.isReg() || !MO.isUse() || MO.isUndef())
1676      continue;
1677    unsigned Reg = MO.getReg();
1678    if (!Reg)
1679      continue;
1680
1681    if (Reg == IncomingReg) {
1682      if (!Found) {
1683        if (MO.isKill())
1684          // The register is already marked kill.
1685          return true;
1686        if (isPhysReg && isRegTiedToDefOperand(i))
1687          // Two-address uses of physregs must not be marked kill.
1688          return true;
1689        MO.setIsKill();
1690        Found = true;
1691      }
1692    } else if (hasAliases && MO.isKill() &&
1693               TargetRegisterInfo::isPhysicalRegister(Reg)) {
1694      // A super-register kill already exists.
1695      if (RegInfo->isSuperRegister(IncomingReg, Reg))
1696        return true;
1697      if (RegInfo->isSubRegister(IncomingReg, Reg))
1698        DeadOps.push_back(i);
1699    }
1700  }
1701
1702  // Trim unneeded kill operands.
1703  while (!DeadOps.empty()) {
1704    unsigned OpIdx = DeadOps.back();
1705    if (getOperand(OpIdx).isImplicit())
1706      RemoveOperand(OpIdx);
1707    else
1708      getOperand(OpIdx).setIsKill(false);
1709    DeadOps.pop_back();
1710  }
1711
1712  // If not found, this means an alias of one of the operands is killed. Add a
1713  // new implicit operand if required.
1714  if (!Found && AddIfNotFound) {
1715    addOperand(MachineOperand::CreateReg(IncomingReg,
1716                                         false /*IsDef*/,
1717                                         true  /*IsImp*/,
1718                                         true  /*IsKill*/));
1719    return true;
1720  }
1721  return Found;
1722}
1723
1724void MachineInstr::clearRegisterKills(unsigned Reg,
1725                                      const TargetRegisterInfo *RegInfo) {
1726  if (!TargetRegisterInfo::isPhysicalRegister(Reg))
1727    RegInfo = 0;
1728  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1729    MachineOperand &MO = getOperand(i);
1730    if (!MO.isReg() || !MO.isUse() || !MO.isKill())
1731      continue;
1732    unsigned OpReg = MO.getReg();
1733    if (OpReg == Reg || (RegInfo && RegInfo->isSuperRegister(Reg, OpReg)))
1734      MO.setIsKill(false);
1735  }
1736}
1737
1738bool MachineInstr::addRegisterDead(unsigned IncomingReg,
1739                                   const TargetRegisterInfo *RegInfo,
1740                                   bool AddIfNotFound) {
1741  bool isPhysReg = TargetRegisterInfo::isPhysicalRegister(IncomingReg);
1742  bool hasAliases = isPhysReg && RegInfo->getAliasSet(IncomingReg);
1743  bool Found = false;
1744  SmallVector<unsigned,4> DeadOps;
1745  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1746    MachineOperand &MO = getOperand(i);
1747    if (!MO.isReg() || !MO.isDef())
1748      continue;
1749    unsigned Reg = MO.getReg();
1750    if (!Reg)
1751      continue;
1752
1753    if (Reg == IncomingReg) {
1754      MO.setIsDead();
1755      Found = true;
1756    } else if (hasAliases && MO.isDead() &&
1757               TargetRegisterInfo::isPhysicalRegister(Reg)) {
1758      // There exists a super-register that's marked dead.
1759      if (RegInfo->isSuperRegister(IncomingReg, Reg))
1760        return true;
1761      if (RegInfo->getSubRegisters(IncomingReg) &&
1762          RegInfo->getSuperRegisters(Reg) &&
1763          RegInfo->isSubRegister(IncomingReg, Reg))
1764        DeadOps.push_back(i);
1765    }
1766  }
1767
1768  // Trim unneeded dead operands.
1769  while (!DeadOps.empty()) {
1770    unsigned OpIdx = DeadOps.back();
1771    if (getOperand(OpIdx).isImplicit())
1772      RemoveOperand(OpIdx);
1773    else
1774      getOperand(OpIdx).setIsDead(false);
1775    DeadOps.pop_back();
1776  }
1777
1778  // If not found, this means an alias of one of the operands is dead. Add a
1779  // new implicit operand if required.
1780  if (Found || !AddIfNotFound)
1781    return Found;
1782
1783  addOperand(MachineOperand::CreateReg(IncomingReg,
1784                                       true  /*IsDef*/,
1785                                       true  /*IsImp*/,
1786                                       false /*IsKill*/,
1787                                       true  /*IsDead*/));
1788  return true;
1789}
1790
1791void MachineInstr::addRegisterDefined(unsigned IncomingReg,
1792                                      const TargetRegisterInfo *RegInfo) {
1793  if (TargetRegisterInfo::isPhysicalRegister(IncomingReg)) {
1794    MachineOperand *MO = findRegisterDefOperand(IncomingReg, false, RegInfo);
1795    if (MO)
1796      return;
1797  } else {
1798    for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1799      const MachineOperand &MO = getOperand(i);
1800      if (MO.isReg() && MO.getReg() == IncomingReg && MO.isDef() &&
1801          MO.getSubReg() == 0)
1802        return;
1803    }
1804  }
1805  addOperand(MachineOperand::CreateReg(IncomingReg,
1806                                       true  /*IsDef*/,
1807                                       true  /*IsImp*/));
1808}
1809
1810void MachineInstr::setPhysRegsDeadExcept(ArrayRef<unsigned> UsedRegs,
1811                                         const TargetRegisterInfo &TRI) {
1812  bool HasRegMask = false;
1813  for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
1814    MachineOperand &MO = getOperand(i);
1815    if (MO.isRegMask()) {
1816      HasRegMask = true;
1817      continue;
1818    }
1819    if (!MO.isReg() || !MO.isDef()) continue;
1820    unsigned Reg = MO.getReg();
1821    if (!TargetRegisterInfo::isPhysicalRegister(Reg)) continue;
1822    bool Dead = true;
1823    for (ArrayRef<unsigned>::iterator I = UsedRegs.begin(), E = UsedRegs.end();
1824         I != E; ++I)
1825      if (TRI.regsOverlap(*I, Reg)) {
1826        Dead = false;
1827        break;
1828      }
1829    // If there are no uses, including partial uses, the def is dead.
1830    if (Dead) MO.setIsDead();
1831  }
1832
1833  // This is a call with a register mask operand.
1834  // Mask clobbers are always dead, so add defs for the non-dead defines.
1835  if (HasRegMask)
1836    for (ArrayRef<unsigned>::iterator I = UsedRegs.begin(), E = UsedRegs.end();
1837         I != E; ++I)
1838      addRegisterDefined(*I, &TRI);
1839}
1840
1841unsigned
1842MachineInstrExpressionTrait::getHashValue(const MachineInstr* const &MI) {
1843  // Build up a buffer of hash code components.
1844  //
1845  // FIXME: This is a total hack. We should have a hash_value overload for
1846  // MachineOperand, but currently that doesn't work because there are many
1847  // different ideas of "equality" and thus different sets of information that
1848  // contribute to the hash code. This one happens to want to take a specific
1849  // subset. And it's still not clear that this routine uses the *correct*
1850  // subset of information when computing the hash code. The goal is to use the
1851  // same inputs for the hash code here that MachineInstr::isIdenticalTo uses to
1852  // test for equality when passed the 'IgnoreVRegDefs' filter flag. It would
1853  // be very useful to factor the selection of relevant inputs out of the two
1854  // functions and into a common routine, but it's not clear how that can be
1855  // done.
1856  SmallVector<size_t, 8> HashComponents;
1857  HashComponents.reserve(MI->getNumOperands() + 1);
1858  HashComponents.push_back(MI->getOpcode());
1859  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
1860    const MachineOperand &MO = MI->getOperand(i);
1861    switch (MO.getType()) {
1862    default: break;
1863    case MachineOperand::MO_Register:
1864      if (MO.isDef() && TargetRegisterInfo::isVirtualRegister(MO.getReg()))
1865        continue;  // Skip virtual register defs.
1866      HashComponents.push_back(hash_combine(MO.getType(), MO.getReg()));
1867      break;
1868    case MachineOperand::MO_Immediate:
1869      HashComponents.push_back(hash_combine(MO.getType(), MO.getImm()));
1870      break;
1871    case MachineOperand::MO_FrameIndex:
1872    case MachineOperand::MO_ConstantPoolIndex:
1873    case MachineOperand::MO_JumpTableIndex:
1874      HashComponents.push_back(hash_combine(MO.getType(), MO.getIndex()));
1875      break;
1876    case MachineOperand::MO_MachineBasicBlock:
1877      HashComponents.push_back(hash_combine(MO.getType(), MO.getMBB()));
1878      break;
1879    case MachineOperand::MO_GlobalAddress:
1880      HashComponents.push_back(hash_combine(MO.getType(), MO.getGlobal()));
1881      break;
1882    case MachineOperand::MO_BlockAddress:
1883      HashComponents.push_back(hash_combine(MO.getType(),
1884                                            MO.getBlockAddress()));
1885      break;
1886    case MachineOperand::MO_MCSymbol:
1887      HashComponents.push_back(hash_combine(MO.getType(), MO.getMCSymbol()));
1888      break;
1889    }
1890  }
1891  return hash_combine_range(HashComponents.begin(), HashComponents.end());
1892}
1893
1894void MachineInstr::emitError(StringRef Msg) const {
1895  // Find the source location cookie.
1896  unsigned LocCookie = 0;
1897  const MDNode *LocMD = 0;
1898  for (unsigned i = getNumOperands(); i != 0; --i) {
1899    if (getOperand(i-1).isMetadata() &&
1900        (LocMD = getOperand(i-1).getMetadata()) &&
1901        LocMD->getNumOperands() != 0) {
1902      if (const ConstantInt *CI = dyn_cast<ConstantInt>(LocMD->getOperand(0))) {
1903        LocCookie = CI->getZExtValue();
1904        break;
1905      }
1906    }
1907  }
1908
1909  if (const MachineBasicBlock *MBB = getParent())
1910    if (const MachineFunction *MF = MBB->getParent())
1911      return MF->getMMI().getModule()->getContext().emitError(LocCookie, Msg);
1912  report_fatal_error(Msg);
1913}
1914