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