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