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