1 //===-- TwoAddressInstructionPass.cpp - Two-Address instruction pass ------===// 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 // This file implements the TwoAddress instruction pass which is used 11 // by most register allocators. Two-Address instructions are rewritten 12 // from: 13 // 14 // A = B op C 15 // 16 // to: 17 // 18 // A = B 19 // A op= C 20 // 21 // Note that if a register allocator chooses to use this pass, that it 22 // has to be capable of handling the non-SSA nature of these rewritten 23 // virtual registers. 24 // 25 // It is also worth noting that the duplicate operand of the two 26 // address instruction is removed. 27 // 28 //===----------------------------------------------------------------------===// 29 30 #define DEBUG_TYPE "twoaddrinstr" 31 #include "llvm/CodeGen/Passes.h" 32 #include "llvm/Function.h" 33 #include "llvm/CodeGen/LiveVariables.h" 34 #include "llvm/CodeGen/MachineFunctionPass.h" 35 #include "llvm/CodeGen/MachineInstr.h" 36 #include "llvm/CodeGen/MachineInstrBuilder.h" 37 #include "llvm/CodeGen/MachineRegisterInfo.h" 38 #include "llvm/Analysis/AliasAnalysis.h" 39 #include "llvm/Target/TargetRegisterInfo.h" 40 #include "llvm/Target/TargetInstrInfo.h" 41 #include "llvm/Target/TargetMachine.h" 42 #include "llvm/Target/TargetOptions.h" 43 #include "llvm/Support/Debug.h" 44 #include "llvm/Support/ErrorHandling.h" 45 #include "llvm/ADT/BitVector.h" 46 #include "llvm/ADT/DenseMap.h" 47 #include "llvm/ADT/SmallSet.h" 48 #include "llvm/ADT/Statistic.h" 49 #include "llvm/ADT/STLExtras.h" 50 using namespace llvm; 51 52 STATISTIC(NumTwoAddressInstrs, "Number of two-address instructions"); 53 STATISTIC(NumCommuted , "Number of instructions commuted to coalesce"); 54 STATISTIC(NumAggrCommuted , "Number of instructions aggressively commuted"); 55 STATISTIC(NumConvertedTo3Addr, "Number of instructions promoted to 3-address"); 56 STATISTIC(Num3AddrSunk, "Number of 3-address instructions sunk"); 57 STATISTIC(NumReMats, "Number of instructions re-materialized"); 58 STATISTIC(NumDeletes, "Number of dead instructions deleted"); 59 60 namespace { 61 class TwoAddressInstructionPass : public MachineFunctionPass { 62 const TargetInstrInfo *TII; 63 const TargetRegisterInfo *TRI; 64 MachineRegisterInfo *MRI; 65 LiveVariables *LV; 66 AliasAnalysis *AA; 67 68 // DistanceMap - Keep track the distance of a MI from the start of the 69 // current basic block. 70 DenseMap<MachineInstr*, unsigned> DistanceMap; 71 72 // SrcRegMap - A map from virtual registers to physical registers which 73 // are likely targets to be coalesced to due to copies from physical 74 // registers to virtual registers. e.g. v1024 = move r0. 75 DenseMap<unsigned, unsigned> SrcRegMap; 76 77 // DstRegMap - A map from virtual registers to physical registers which 78 // are likely targets to be coalesced to due to copies to physical 79 // registers from virtual registers. e.g. r1 = move v1024. 80 DenseMap<unsigned, unsigned> DstRegMap; 81 82 /// RegSequences - Keep track the list of REG_SEQUENCE instructions seen 83 /// during the initial walk of the machine function. 84 SmallVector<MachineInstr*, 16> RegSequences; 85 86 bool Sink3AddrInstruction(MachineBasicBlock *MBB, MachineInstr *MI, 87 unsigned Reg, 88 MachineBasicBlock::iterator OldPos); 89 90 bool isProfitableToReMat(unsigned Reg, const TargetRegisterClass *RC, 91 MachineInstr *MI, MachineInstr *DefMI, 92 MachineBasicBlock *MBB, unsigned Loc); 93 94 bool NoUseAfterLastDef(unsigned Reg, MachineBasicBlock *MBB, unsigned Dist, 95 unsigned &LastDef); 96 97 MachineInstr *FindLastUseInMBB(unsigned Reg, MachineBasicBlock *MBB, 98 unsigned Dist); 99 100 bool isProfitableToCommute(unsigned regB, unsigned regC, 101 MachineInstr *MI, MachineBasicBlock *MBB, 102 unsigned Dist); 103 104 bool CommuteInstruction(MachineBasicBlock::iterator &mi, 105 MachineFunction::iterator &mbbi, 106 unsigned RegB, unsigned RegC, unsigned Dist); 107 108 bool isProfitableToConv3Addr(unsigned RegA, unsigned RegB); 109 110 bool ConvertInstTo3Addr(MachineBasicBlock::iterator &mi, 111 MachineBasicBlock::iterator &nmi, 112 MachineFunction::iterator &mbbi, 113 unsigned RegA, unsigned RegB, unsigned Dist); 114 115 typedef std::pair<std::pair<unsigned, bool>, MachineInstr*> NewKill; 116 bool canUpdateDeletedKills(SmallVector<unsigned, 4> &Kills, 117 SmallVector<NewKill, 4> &NewKills, 118 MachineBasicBlock *MBB, unsigned Dist); 119 bool DeleteUnusedInstr(MachineBasicBlock::iterator &mi, 120 MachineBasicBlock::iterator &nmi, 121 MachineFunction::iterator &mbbi, unsigned Dist); 122 123 bool TryInstructionTransform(MachineBasicBlock::iterator &mi, 124 MachineBasicBlock::iterator &nmi, 125 MachineFunction::iterator &mbbi, 126 unsigned SrcIdx, unsigned DstIdx, 127 unsigned Dist, 128 SmallPtrSet<MachineInstr*, 8> &Processed); 129 130 void ScanUses(unsigned DstReg, MachineBasicBlock *MBB, 131 SmallPtrSet<MachineInstr*, 8> &Processed); 132 133 void ProcessCopy(MachineInstr *MI, MachineBasicBlock *MBB, 134 SmallPtrSet<MachineInstr*, 8> &Processed); 135 136 void CoalesceExtSubRegs(SmallVector<unsigned,4> &Srcs, unsigned DstReg); 137 138 /// EliminateRegSequences - Eliminate REG_SEQUENCE instructions as part 139 /// of the de-ssa process. This replaces sources of REG_SEQUENCE as 140 /// sub-register references of the register defined by REG_SEQUENCE. 141 bool EliminateRegSequences(); 142 143 public: 144 static char ID; // Pass identification, replacement for typeid 145 TwoAddressInstructionPass() : MachineFunctionPass(ID) { 146 initializeTwoAddressInstructionPassPass(*PassRegistry::getPassRegistry()); 147 } 148 149 virtual void getAnalysisUsage(AnalysisUsage &AU) const { 150 AU.setPreservesCFG(); 151 AU.addRequired<AliasAnalysis>(); 152 AU.addPreserved<LiveVariables>(); 153 AU.addPreservedID(MachineLoopInfoID); 154 AU.addPreservedID(MachineDominatorsID); 155 AU.addPreservedID(PHIEliminationID); 156 MachineFunctionPass::getAnalysisUsage(AU); 157 } 158 159 /// runOnMachineFunction - Pass entry point. 160 bool runOnMachineFunction(MachineFunction&); 161 }; 162 } 163 164 char TwoAddressInstructionPass::ID = 0; 165 INITIALIZE_PASS_BEGIN(TwoAddressInstructionPass, "twoaddressinstruction", 166 "Two-Address instruction pass", false, false) 167 INITIALIZE_AG_DEPENDENCY(AliasAnalysis) 168 INITIALIZE_PASS_END(TwoAddressInstructionPass, "twoaddressinstruction", 169 "Two-Address instruction pass", false, false) 170 171 char &llvm::TwoAddressInstructionPassID = TwoAddressInstructionPass::ID; 172 173 /// Sink3AddrInstruction - A two-address instruction has been converted to a 174 /// three-address instruction to avoid clobbering a register. Try to sink it 175 /// past the instruction that would kill the above mentioned register to reduce 176 /// register pressure. 177 bool TwoAddressInstructionPass::Sink3AddrInstruction(MachineBasicBlock *MBB, 178 MachineInstr *MI, unsigned SavedReg, 179 MachineBasicBlock::iterator OldPos) { 180 // Check if it's safe to move this instruction. 181 bool SeenStore = true; // Be conservative. 182 if (!MI->isSafeToMove(TII, AA, SeenStore)) 183 return false; 184 185 unsigned DefReg = 0; 186 SmallSet<unsigned, 4> UseRegs; 187 188 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 189 const MachineOperand &MO = MI->getOperand(i); 190 if (!MO.isReg()) 191 continue; 192 unsigned MOReg = MO.getReg(); 193 if (!MOReg) 194 continue; 195 if (MO.isUse() && MOReg != SavedReg) 196 UseRegs.insert(MO.getReg()); 197 if (!MO.isDef()) 198 continue; 199 if (MO.isImplicit()) 200 // Don't try to move it if it implicitly defines a register. 201 return false; 202 if (DefReg) 203 // For now, don't move any instructions that define multiple registers. 204 return false; 205 DefReg = MO.getReg(); 206 } 207 208 // Find the instruction that kills SavedReg. 209 MachineInstr *KillMI = NULL; 210 for (MachineRegisterInfo::use_nodbg_iterator 211 UI = MRI->use_nodbg_begin(SavedReg), 212 UE = MRI->use_nodbg_end(); UI != UE; ++UI) { 213 MachineOperand &UseMO = UI.getOperand(); 214 if (!UseMO.isKill()) 215 continue; 216 KillMI = UseMO.getParent(); 217 break; 218 } 219 220 if (!KillMI || KillMI->getParent() != MBB || KillMI == MI) 221 return false; 222 223 // If any of the definitions are used by another instruction between the 224 // position and the kill use, then it's not safe to sink it. 225 // 226 // FIXME: This can be sped up if there is an easy way to query whether an 227 // instruction is before or after another instruction. Then we can use 228 // MachineRegisterInfo def / use instead. 229 MachineOperand *KillMO = NULL; 230 MachineBasicBlock::iterator KillPos = KillMI; 231 ++KillPos; 232 233 unsigned NumVisited = 0; 234 for (MachineBasicBlock::iterator I = llvm::next(OldPos); I != KillPos; ++I) { 235 MachineInstr *OtherMI = I; 236 // DBG_VALUE cannot be counted against the limit. 237 if (OtherMI->isDebugValue()) 238 continue; 239 if (NumVisited > 30) // FIXME: Arbitrary limit to reduce compile time cost. 240 return false; 241 ++NumVisited; 242 for (unsigned i = 0, e = OtherMI->getNumOperands(); i != e; ++i) { 243 MachineOperand &MO = OtherMI->getOperand(i); 244 if (!MO.isReg()) 245 continue; 246 unsigned MOReg = MO.getReg(); 247 if (!MOReg) 248 continue; 249 if (DefReg == MOReg) 250 return false; 251 252 if (MO.isKill()) { 253 if (OtherMI == KillMI && MOReg == SavedReg) 254 // Save the operand that kills the register. We want to unset the kill 255 // marker if we can sink MI past it. 256 KillMO = &MO; 257 else if (UseRegs.count(MOReg)) 258 // One of the uses is killed before the destination. 259 return false; 260 } 261 } 262 } 263 264 // Update kill and LV information. 265 KillMO->setIsKill(false); 266 KillMO = MI->findRegisterUseOperand(SavedReg, false, TRI); 267 KillMO->setIsKill(true); 268 269 if (LV) 270 LV->replaceKillInstruction(SavedReg, KillMI, MI); 271 272 // Move instruction to its destination. 273 MBB->remove(MI); 274 MBB->insert(KillPos, MI); 275 276 ++Num3AddrSunk; 277 return true; 278 } 279 280 /// isTwoAddrUse - Return true if the specified MI is using the specified 281 /// register as a two-address operand. 282 static bool isTwoAddrUse(MachineInstr *UseMI, unsigned Reg) { 283 const MCInstrDesc &MCID = UseMI->getDesc(); 284 for (unsigned i = 0, e = MCID.getNumOperands(); i != e; ++i) { 285 MachineOperand &MO = UseMI->getOperand(i); 286 if (MO.isReg() && MO.getReg() == Reg && 287 (MO.isDef() || UseMI->isRegTiedToDefOperand(i))) 288 // Earlier use is a two-address one. 289 return true; 290 } 291 return false; 292 } 293 294 /// isProfitableToReMat - Return true if the heuristics determines it is likely 295 /// to be profitable to re-materialize the definition of Reg rather than copy 296 /// the register. 297 bool 298 TwoAddressInstructionPass::isProfitableToReMat(unsigned Reg, 299 const TargetRegisterClass *RC, 300 MachineInstr *MI, MachineInstr *DefMI, 301 MachineBasicBlock *MBB, unsigned Loc) { 302 bool OtherUse = false; 303 for (MachineRegisterInfo::use_nodbg_iterator UI = MRI->use_nodbg_begin(Reg), 304 UE = MRI->use_nodbg_end(); UI != UE; ++UI) { 305 MachineOperand &UseMO = UI.getOperand(); 306 MachineInstr *UseMI = UseMO.getParent(); 307 MachineBasicBlock *UseMBB = UseMI->getParent(); 308 if (UseMBB == MBB) { 309 DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(UseMI); 310 if (DI != DistanceMap.end() && DI->second == Loc) 311 continue; // Current use. 312 OtherUse = true; 313 // There is at least one other use in the MBB that will clobber the 314 // register. 315 if (isTwoAddrUse(UseMI, Reg)) 316 return true; 317 } 318 } 319 320 // If other uses in MBB are not two-address uses, then don't remat. 321 if (OtherUse) 322 return false; 323 324 // No other uses in the same block, remat if it's defined in the same 325 // block so it does not unnecessarily extend the live range. 326 return MBB == DefMI->getParent(); 327 } 328 329 /// NoUseAfterLastDef - Return true if there are no intervening uses between the 330 /// last instruction in the MBB that defines the specified register and the 331 /// two-address instruction which is being processed. It also returns the last 332 /// def location by reference 333 bool TwoAddressInstructionPass::NoUseAfterLastDef(unsigned Reg, 334 MachineBasicBlock *MBB, unsigned Dist, 335 unsigned &LastDef) { 336 LastDef = 0; 337 unsigned LastUse = Dist; 338 for (MachineRegisterInfo::reg_iterator I = MRI->reg_begin(Reg), 339 E = MRI->reg_end(); I != E; ++I) { 340 MachineOperand &MO = I.getOperand(); 341 MachineInstr *MI = MO.getParent(); 342 if (MI->getParent() != MBB || MI->isDebugValue()) 343 continue; 344 DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(MI); 345 if (DI == DistanceMap.end()) 346 continue; 347 if (MO.isUse() && DI->second < LastUse) 348 LastUse = DI->second; 349 if (MO.isDef() && DI->second > LastDef) 350 LastDef = DI->second; 351 } 352 353 return !(LastUse > LastDef && LastUse < Dist); 354 } 355 356 MachineInstr *TwoAddressInstructionPass::FindLastUseInMBB(unsigned Reg, 357 MachineBasicBlock *MBB, 358 unsigned Dist) { 359 unsigned LastUseDist = 0; 360 MachineInstr *LastUse = 0; 361 for (MachineRegisterInfo::reg_iterator I = MRI->reg_begin(Reg), 362 E = MRI->reg_end(); I != E; ++I) { 363 MachineOperand &MO = I.getOperand(); 364 MachineInstr *MI = MO.getParent(); 365 if (MI->getParent() != MBB || MI->isDebugValue()) 366 continue; 367 DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(MI); 368 if (DI == DistanceMap.end()) 369 continue; 370 if (DI->second >= Dist) 371 continue; 372 373 if (MO.isUse() && DI->second > LastUseDist) { 374 LastUse = DI->first; 375 LastUseDist = DI->second; 376 } 377 } 378 return LastUse; 379 } 380 381 /// isCopyToReg - Return true if the specified MI is a copy instruction or 382 /// a extract_subreg instruction. It also returns the source and destination 383 /// registers and whether they are physical registers by reference. 384 static bool isCopyToReg(MachineInstr &MI, const TargetInstrInfo *TII, 385 unsigned &SrcReg, unsigned &DstReg, 386 bool &IsSrcPhys, bool &IsDstPhys) { 387 SrcReg = 0; 388 DstReg = 0; 389 if (MI.isCopy()) { 390 DstReg = MI.getOperand(0).getReg(); 391 SrcReg = MI.getOperand(1).getReg(); 392 } else if (MI.isInsertSubreg() || MI.isSubregToReg()) { 393 DstReg = MI.getOperand(0).getReg(); 394 SrcReg = MI.getOperand(2).getReg(); 395 } else 396 return false; 397 398 IsSrcPhys = TargetRegisterInfo::isPhysicalRegister(SrcReg); 399 IsDstPhys = TargetRegisterInfo::isPhysicalRegister(DstReg); 400 return true; 401 } 402 403 /// isKilled - Test if the given register value, which is used by the given 404 /// instruction, is killed by the given instruction. This looks through 405 /// coalescable copies to see if the original value is potentially not killed. 406 /// 407 /// For example, in this code: 408 /// 409 /// %reg1034 = copy %reg1024 410 /// %reg1035 = copy %reg1025<kill> 411 /// %reg1036 = add %reg1034<kill>, %reg1035<kill> 412 /// 413 /// %reg1034 is not considered to be killed, since it is copied from a 414 /// register which is not killed. Treating it as not killed lets the 415 /// normal heuristics commute the (two-address) add, which lets 416 /// coalescing eliminate the extra copy. 417 /// 418 static bool isKilled(MachineInstr &MI, unsigned Reg, 419 const MachineRegisterInfo *MRI, 420 const TargetInstrInfo *TII) { 421 MachineInstr *DefMI = &MI; 422 for (;;) { 423 if (!DefMI->killsRegister(Reg)) 424 return false; 425 if (TargetRegisterInfo::isPhysicalRegister(Reg)) 426 return true; 427 MachineRegisterInfo::def_iterator Begin = MRI->def_begin(Reg); 428 // If there are multiple defs, we can't do a simple analysis, so just 429 // go with what the kill flag says. 430 if (llvm::next(Begin) != MRI->def_end()) 431 return true; 432 DefMI = &*Begin; 433 bool IsSrcPhys, IsDstPhys; 434 unsigned SrcReg, DstReg; 435 // If the def is something other than a copy, then it isn't going to 436 // be coalesced, so follow the kill flag. 437 if (!isCopyToReg(*DefMI, TII, SrcReg, DstReg, IsSrcPhys, IsDstPhys)) 438 return true; 439 Reg = SrcReg; 440 } 441 } 442 443 /// isTwoAddrUse - Return true if the specified MI uses the specified register 444 /// as a two-address use. If so, return the destination register by reference. 445 static bool isTwoAddrUse(MachineInstr &MI, unsigned Reg, unsigned &DstReg) { 446 const MCInstrDesc &MCID = MI.getDesc(); 447 unsigned NumOps = MI.isInlineAsm() 448 ? MI.getNumOperands() : MCID.getNumOperands(); 449 for (unsigned i = 0; i != NumOps; ++i) { 450 const MachineOperand &MO = MI.getOperand(i); 451 if (!MO.isReg() || !MO.isUse() || MO.getReg() != Reg) 452 continue; 453 unsigned ti; 454 if (MI.isRegTiedToDefOperand(i, &ti)) { 455 DstReg = MI.getOperand(ti).getReg(); 456 return true; 457 } 458 } 459 return false; 460 } 461 462 /// findOnlyInterestingUse - Given a register, if has a single in-basic block 463 /// use, return the use instruction if it's a copy or a two-address use. 464 static 465 MachineInstr *findOnlyInterestingUse(unsigned Reg, MachineBasicBlock *MBB, 466 MachineRegisterInfo *MRI, 467 const TargetInstrInfo *TII, 468 bool &IsCopy, 469 unsigned &DstReg, bool &IsDstPhys) { 470 if (!MRI->hasOneNonDBGUse(Reg)) 471 // None or more than one use. 472 return 0; 473 MachineInstr &UseMI = *MRI->use_nodbg_begin(Reg); 474 if (UseMI.getParent() != MBB) 475 return 0; 476 unsigned SrcReg; 477 bool IsSrcPhys; 478 if (isCopyToReg(UseMI, TII, SrcReg, DstReg, IsSrcPhys, IsDstPhys)) { 479 IsCopy = true; 480 return &UseMI; 481 } 482 IsDstPhys = false; 483 if (isTwoAddrUse(UseMI, Reg, DstReg)) { 484 IsDstPhys = TargetRegisterInfo::isPhysicalRegister(DstReg); 485 return &UseMI; 486 } 487 return 0; 488 } 489 490 /// getMappedReg - Return the physical register the specified virtual register 491 /// might be mapped to. 492 static unsigned 493 getMappedReg(unsigned Reg, DenseMap<unsigned, unsigned> &RegMap) { 494 while (TargetRegisterInfo::isVirtualRegister(Reg)) { 495 DenseMap<unsigned, unsigned>::iterator SI = RegMap.find(Reg); 496 if (SI == RegMap.end()) 497 return 0; 498 Reg = SI->second; 499 } 500 if (TargetRegisterInfo::isPhysicalRegister(Reg)) 501 return Reg; 502 return 0; 503 } 504 505 /// regsAreCompatible - Return true if the two registers are equal or aliased. 506 /// 507 static bool 508 regsAreCompatible(unsigned RegA, unsigned RegB, const TargetRegisterInfo *TRI) { 509 if (RegA == RegB) 510 return true; 511 if (!RegA || !RegB) 512 return false; 513 return TRI->regsOverlap(RegA, RegB); 514 } 515 516 517 /// isProfitableToReMat - Return true if it's potentially profitable to commute 518 /// the two-address instruction that's being processed. 519 bool 520 TwoAddressInstructionPass::isProfitableToCommute(unsigned regB, unsigned regC, 521 MachineInstr *MI, MachineBasicBlock *MBB, 522 unsigned Dist) { 523 // Determine if it's profitable to commute this two address instruction. In 524 // general, we want no uses between this instruction and the definition of 525 // the two-address register. 526 // e.g. 527 // %reg1028<def> = EXTRACT_SUBREG %reg1027<kill>, 1 528 // %reg1029<def> = MOV8rr %reg1028 529 // %reg1029<def> = SHR8ri %reg1029, 7, %EFLAGS<imp-def,dead> 530 // insert => %reg1030<def> = MOV8rr %reg1028 531 // %reg1030<def> = ADD8rr %reg1028<kill>, %reg1029<kill>, %EFLAGS<imp-def,dead> 532 // In this case, it might not be possible to coalesce the second MOV8rr 533 // instruction if the first one is coalesced. So it would be profitable to 534 // commute it: 535 // %reg1028<def> = EXTRACT_SUBREG %reg1027<kill>, 1 536 // %reg1029<def> = MOV8rr %reg1028 537 // %reg1029<def> = SHR8ri %reg1029, 7, %EFLAGS<imp-def,dead> 538 // insert => %reg1030<def> = MOV8rr %reg1029 539 // %reg1030<def> = ADD8rr %reg1029<kill>, %reg1028<kill>, %EFLAGS<imp-def,dead> 540 541 if (!MI->killsRegister(regC)) 542 return false; 543 544 // Ok, we have something like: 545 // %reg1030<def> = ADD8rr %reg1028<kill>, %reg1029<kill>, %EFLAGS<imp-def,dead> 546 // let's see if it's worth commuting it. 547 548 // Look for situations like this: 549 // %reg1024<def> = MOV r1 550 // %reg1025<def> = MOV r0 551 // %reg1026<def> = ADD %reg1024, %reg1025 552 // r0 = MOV %reg1026 553 // Commute the ADD to hopefully eliminate an otherwise unavoidable copy. 554 unsigned FromRegB = getMappedReg(regB, SrcRegMap); 555 unsigned FromRegC = getMappedReg(regC, SrcRegMap); 556 unsigned ToRegB = getMappedReg(regB, DstRegMap); 557 unsigned ToRegC = getMappedReg(regC, DstRegMap); 558 if ((FromRegB && ToRegB && !regsAreCompatible(FromRegB, ToRegB, TRI)) && 559 ((!FromRegC && !ToRegC) || 560 regsAreCompatible(FromRegB, ToRegC, TRI) || 561 regsAreCompatible(FromRegC, ToRegB, TRI))) 562 return true; 563 564 // If there is a use of regC between its last def (could be livein) and this 565 // instruction, then bail. 566 unsigned LastDefC = 0; 567 if (!NoUseAfterLastDef(regC, MBB, Dist, LastDefC)) 568 return false; 569 570 // If there is a use of regB between its last def (could be livein) and this 571 // instruction, then go ahead and make this transformation. 572 unsigned LastDefB = 0; 573 if (!NoUseAfterLastDef(regB, MBB, Dist, LastDefB)) 574 return true; 575 576 // Since there are no intervening uses for both registers, then commute 577 // if the def of regC is closer. Its live interval is shorter. 578 return LastDefB && LastDefC && LastDefC > LastDefB; 579 } 580 581 /// CommuteInstruction - Commute a two-address instruction and update the basic 582 /// block, distance map, and live variables if needed. Return true if it is 583 /// successful. 584 bool 585 TwoAddressInstructionPass::CommuteInstruction(MachineBasicBlock::iterator &mi, 586 MachineFunction::iterator &mbbi, 587 unsigned RegB, unsigned RegC, unsigned Dist) { 588 MachineInstr *MI = mi; 589 DEBUG(dbgs() << "2addr: COMMUTING : " << *MI); 590 MachineInstr *NewMI = TII->commuteInstruction(MI); 591 592 if (NewMI == 0) { 593 DEBUG(dbgs() << "2addr: COMMUTING FAILED!\n"); 594 return false; 595 } 596 597 DEBUG(dbgs() << "2addr: COMMUTED TO: " << *NewMI); 598 // If the instruction changed to commute it, update livevar. 599 if (NewMI != MI) { 600 if (LV) 601 // Update live variables 602 LV->replaceKillInstruction(RegC, MI, NewMI); 603 604 mbbi->insert(mi, NewMI); // Insert the new inst 605 mbbi->erase(mi); // Nuke the old inst. 606 mi = NewMI; 607 DistanceMap.insert(std::make_pair(NewMI, Dist)); 608 } 609 610 // Update source register map. 611 unsigned FromRegC = getMappedReg(RegC, SrcRegMap); 612 if (FromRegC) { 613 unsigned RegA = MI->getOperand(0).getReg(); 614 SrcRegMap[RegA] = FromRegC; 615 } 616 617 return true; 618 } 619 620 /// isProfitableToConv3Addr - Return true if it is profitable to convert the 621 /// given 2-address instruction to a 3-address one. 622 bool 623 TwoAddressInstructionPass::isProfitableToConv3Addr(unsigned RegA,unsigned RegB){ 624 // Look for situations like this: 625 // %reg1024<def> = MOV r1 626 // %reg1025<def> = MOV r0 627 // %reg1026<def> = ADD %reg1024, %reg1025 628 // r2 = MOV %reg1026 629 // Turn ADD into a 3-address instruction to avoid a copy. 630 unsigned FromRegB = getMappedReg(RegB, SrcRegMap); 631 if (!FromRegB) 632 return false; 633 unsigned ToRegA = getMappedReg(RegA, DstRegMap); 634 return (ToRegA && !regsAreCompatible(FromRegB, ToRegA, TRI)); 635 } 636 637 /// ConvertInstTo3Addr - Convert the specified two-address instruction into a 638 /// three address one. Return true if this transformation was successful. 639 bool 640 TwoAddressInstructionPass::ConvertInstTo3Addr(MachineBasicBlock::iterator &mi, 641 MachineBasicBlock::iterator &nmi, 642 MachineFunction::iterator &mbbi, 643 unsigned RegA, unsigned RegB, 644 unsigned Dist) { 645 MachineInstr *NewMI = TII->convertToThreeAddress(mbbi, mi, LV); 646 if (NewMI) { 647 DEBUG(dbgs() << "2addr: CONVERTING 2-ADDR: " << *mi); 648 DEBUG(dbgs() << "2addr: TO 3-ADDR: " << *NewMI); 649 bool Sunk = false; 650 651 if (NewMI->findRegisterUseOperand(RegB, false, TRI)) 652 // FIXME: Temporary workaround. If the new instruction doesn't 653 // uses RegB, convertToThreeAddress must have created more 654 // then one instruction. 655 Sunk = Sink3AddrInstruction(mbbi, NewMI, RegB, mi); 656 657 mbbi->erase(mi); // Nuke the old inst. 658 659 if (!Sunk) { 660 DistanceMap.insert(std::make_pair(NewMI, Dist)); 661 mi = NewMI; 662 nmi = llvm::next(mi); 663 } 664 665 // Update source and destination register maps. 666 SrcRegMap.erase(RegA); 667 DstRegMap.erase(RegB); 668 return true; 669 } 670 671 return false; 672 } 673 674 /// ScanUses - Scan forward recursively for only uses, update maps if the use 675 /// is a copy or a two-address instruction. 676 void 677 TwoAddressInstructionPass::ScanUses(unsigned DstReg, MachineBasicBlock *MBB, 678 SmallPtrSet<MachineInstr*, 8> &Processed) { 679 SmallVector<unsigned, 4> VirtRegPairs; 680 bool IsDstPhys; 681 bool IsCopy = false; 682 unsigned NewReg = 0; 683 unsigned Reg = DstReg; 684 while (MachineInstr *UseMI = findOnlyInterestingUse(Reg, MBB, MRI, TII,IsCopy, 685 NewReg, IsDstPhys)) { 686 if (IsCopy && !Processed.insert(UseMI)) 687 break; 688 689 DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(UseMI); 690 if (DI != DistanceMap.end()) 691 // Earlier in the same MBB.Reached via a back edge. 692 break; 693 694 if (IsDstPhys) { 695 VirtRegPairs.push_back(NewReg); 696 break; 697 } 698 bool isNew = SrcRegMap.insert(std::make_pair(NewReg, Reg)).second; 699 if (!isNew) 700 assert(SrcRegMap[NewReg] == Reg && "Can't map to two src registers!"); 701 VirtRegPairs.push_back(NewReg); 702 Reg = NewReg; 703 } 704 705 if (!VirtRegPairs.empty()) { 706 unsigned ToReg = VirtRegPairs.back(); 707 VirtRegPairs.pop_back(); 708 while (!VirtRegPairs.empty()) { 709 unsigned FromReg = VirtRegPairs.back(); 710 VirtRegPairs.pop_back(); 711 bool isNew = DstRegMap.insert(std::make_pair(FromReg, ToReg)).second; 712 if (!isNew) 713 assert(DstRegMap[FromReg] == ToReg &&"Can't map to two dst registers!"); 714 ToReg = FromReg; 715 } 716 bool isNew = DstRegMap.insert(std::make_pair(DstReg, ToReg)).second; 717 if (!isNew) 718 assert(DstRegMap[DstReg] == ToReg && "Can't map to two dst registers!"); 719 } 720 } 721 722 /// ProcessCopy - If the specified instruction is not yet processed, process it 723 /// if it's a copy. For a copy instruction, we find the physical registers the 724 /// source and destination registers might be mapped to. These are kept in 725 /// point-to maps used to determine future optimizations. e.g. 726 /// v1024 = mov r0 727 /// v1025 = mov r1 728 /// v1026 = add v1024, v1025 729 /// r1 = mov r1026 730 /// If 'add' is a two-address instruction, v1024, v1026 are both potentially 731 /// coalesced to r0 (from the input side). v1025 is mapped to r1. v1026 is 732 /// potentially joined with r1 on the output side. It's worthwhile to commute 733 /// 'add' to eliminate a copy. 734 void TwoAddressInstructionPass::ProcessCopy(MachineInstr *MI, 735 MachineBasicBlock *MBB, 736 SmallPtrSet<MachineInstr*, 8> &Processed) { 737 if (Processed.count(MI)) 738 return; 739 740 bool IsSrcPhys, IsDstPhys; 741 unsigned SrcReg, DstReg; 742 if (!isCopyToReg(*MI, TII, SrcReg, DstReg, IsSrcPhys, IsDstPhys)) 743 return; 744 745 if (IsDstPhys && !IsSrcPhys) 746 DstRegMap.insert(std::make_pair(SrcReg, DstReg)); 747 else if (!IsDstPhys && IsSrcPhys) { 748 bool isNew = SrcRegMap.insert(std::make_pair(DstReg, SrcReg)).second; 749 if (!isNew) 750 assert(SrcRegMap[DstReg] == SrcReg && 751 "Can't map to two src physical registers!"); 752 753 ScanUses(DstReg, MBB, Processed); 754 } 755 756 Processed.insert(MI); 757 return; 758 } 759 760 /// isSafeToDelete - If the specified instruction does not produce any side 761 /// effects and all of its defs are dead, then it's safe to delete. 762 static bool isSafeToDelete(MachineInstr *MI, 763 const TargetInstrInfo *TII, 764 SmallVector<unsigned, 4> &Kills) { 765 const MCInstrDesc &MCID = MI->getDesc(); 766 if (MCID.mayStore() || MCID.isCall()) 767 return false; 768 if (MCID.isTerminator() || MI->hasUnmodeledSideEffects()) 769 return false; 770 771 for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { 772 MachineOperand &MO = MI->getOperand(i); 773 if (!MO.isReg()) 774 continue; 775 if (MO.isDef() && !MO.isDead()) 776 return false; 777 if (MO.isUse() && MO.isKill()) 778 Kills.push_back(MO.getReg()); 779 } 780 return true; 781 } 782 783 /// canUpdateDeletedKills - Check if all the registers listed in Kills are 784 /// killed by instructions in MBB preceding the current instruction at 785 /// position Dist. If so, return true and record information about the 786 /// preceding kills in NewKills. 787 bool TwoAddressInstructionPass:: 788 canUpdateDeletedKills(SmallVector<unsigned, 4> &Kills, 789 SmallVector<NewKill, 4> &NewKills, 790 MachineBasicBlock *MBB, unsigned Dist) { 791 while (!Kills.empty()) { 792 unsigned Kill = Kills.back(); 793 Kills.pop_back(); 794 if (TargetRegisterInfo::isPhysicalRegister(Kill)) 795 return false; 796 797 MachineInstr *LastKill = FindLastUseInMBB(Kill, MBB, Dist); 798 if (!LastKill) 799 return false; 800 801 bool isModRef = LastKill->definesRegister(Kill); 802 NewKills.push_back(std::make_pair(std::make_pair(Kill, isModRef), 803 LastKill)); 804 } 805 return true; 806 } 807 808 /// DeleteUnusedInstr - If an instruction with a tied register operand can 809 /// be safely deleted, just delete it. 810 bool 811 TwoAddressInstructionPass::DeleteUnusedInstr(MachineBasicBlock::iterator &mi, 812 MachineBasicBlock::iterator &nmi, 813 MachineFunction::iterator &mbbi, 814 unsigned Dist) { 815 // Check if the instruction has no side effects and if all its defs are dead. 816 SmallVector<unsigned, 4> Kills; 817 if (!isSafeToDelete(mi, TII, Kills)) 818 return false; 819 820 // If this instruction kills some virtual registers, we need to 821 // update the kill information. If it's not possible to do so, 822 // then bail out. 823 SmallVector<NewKill, 4> NewKills; 824 if (!canUpdateDeletedKills(Kills, NewKills, &*mbbi, Dist)) 825 return false; 826 827 if (LV) { 828 while (!NewKills.empty()) { 829 MachineInstr *NewKill = NewKills.back().second; 830 unsigned Kill = NewKills.back().first.first; 831 bool isDead = NewKills.back().first.second; 832 NewKills.pop_back(); 833 if (LV->removeVirtualRegisterKilled(Kill, mi)) { 834 if (isDead) 835 LV->addVirtualRegisterDead(Kill, NewKill); 836 else 837 LV->addVirtualRegisterKilled(Kill, NewKill); 838 } 839 } 840 } 841 842 mbbi->erase(mi); // Nuke the old inst. 843 mi = nmi; 844 return true; 845 } 846 847 /// TryInstructionTransform - For the case where an instruction has a single 848 /// pair of tied register operands, attempt some transformations that may 849 /// either eliminate the tied operands or improve the opportunities for 850 /// coalescing away the register copy. Returns true if the tied operands 851 /// are eliminated altogether. 852 bool TwoAddressInstructionPass:: 853 TryInstructionTransform(MachineBasicBlock::iterator &mi, 854 MachineBasicBlock::iterator &nmi, 855 MachineFunction::iterator &mbbi, 856 unsigned SrcIdx, unsigned DstIdx, unsigned Dist, 857 SmallPtrSet<MachineInstr*, 8> &Processed) { 858 const MCInstrDesc &MCID = mi->getDesc(); 859 unsigned regA = mi->getOperand(DstIdx).getReg(); 860 unsigned regB = mi->getOperand(SrcIdx).getReg(); 861 862 assert(TargetRegisterInfo::isVirtualRegister(regB) && 863 "cannot make instruction into two-address form"); 864 865 // If regA is dead and the instruction can be deleted, just delete 866 // it so it doesn't clobber regB. 867 bool regBKilled = isKilled(*mi, regB, MRI, TII); 868 if (!regBKilled && mi->getOperand(DstIdx).isDead() && 869 DeleteUnusedInstr(mi, nmi, mbbi, Dist)) { 870 ++NumDeletes; 871 return true; // Done with this instruction. 872 } 873 874 // Check if it is profitable to commute the operands. 875 unsigned SrcOp1, SrcOp2; 876 unsigned regC = 0; 877 unsigned regCIdx = ~0U; 878 bool TryCommute = false; 879 bool AggressiveCommute = false; 880 if (MCID.isCommutable() && mi->getNumOperands() >= 3 && 881 TII->findCommutedOpIndices(mi, SrcOp1, SrcOp2)) { 882 if (SrcIdx == SrcOp1) 883 regCIdx = SrcOp2; 884 else if (SrcIdx == SrcOp2) 885 regCIdx = SrcOp1; 886 887 if (regCIdx != ~0U) { 888 regC = mi->getOperand(regCIdx).getReg(); 889 if (!regBKilled && isKilled(*mi, regC, MRI, TII)) 890 // If C dies but B does not, swap the B and C operands. 891 // This makes the live ranges of A and C joinable. 892 TryCommute = true; 893 else if (isProfitableToCommute(regB, regC, mi, mbbi, Dist)) { 894 TryCommute = true; 895 AggressiveCommute = true; 896 } 897 } 898 } 899 900 // If it's profitable to commute, try to do so. 901 if (TryCommute && CommuteInstruction(mi, mbbi, regB, regC, Dist)) { 902 ++NumCommuted; 903 if (AggressiveCommute) 904 ++NumAggrCommuted; 905 return false; 906 } 907 908 if (TargetRegisterInfo::isVirtualRegister(regA)) 909 ScanUses(regA, &*mbbi, Processed); 910 911 if (MCID.isConvertibleTo3Addr()) { 912 // This instruction is potentially convertible to a true 913 // three-address instruction. Check if it is profitable. 914 if (!regBKilled || isProfitableToConv3Addr(regA, regB)) { 915 // Try to convert it. 916 if (ConvertInstTo3Addr(mi, nmi, mbbi, regA, regB, Dist)) { 917 ++NumConvertedTo3Addr; 918 return true; // Done with this instruction. 919 } 920 } 921 } 922 923 // If this is an instruction with a load folded into it, try unfolding 924 // the load, e.g. avoid this: 925 // movq %rdx, %rcx 926 // addq (%rax), %rcx 927 // in favor of this: 928 // movq (%rax), %rcx 929 // addq %rdx, %rcx 930 // because it's preferable to schedule a load than a register copy. 931 if (MCID.mayLoad() && !regBKilled) { 932 // Determine if a load can be unfolded. 933 unsigned LoadRegIndex; 934 unsigned NewOpc = 935 TII->getOpcodeAfterMemoryUnfold(mi->getOpcode(), 936 /*UnfoldLoad=*/true, 937 /*UnfoldStore=*/false, 938 &LoadRegIndex); 939 if (NewOpc != 0) { 940 const MCInstrDesc &UnfoldMCID = TII->get(NewOpc); 941 if (UnfoldMCID.getNumDefs() == 1) { 942 MachineFunction &MF = *mbbi->getParent(); 943 944 // Unfold the load. 945 DEBUG(dbgs() << "2addr: UNFOLDING: " << *mi); 946 const TargetRegisterClass *RC = 947 TII->getRegClass(UnfoldMCID, LoadRegIndex, TRI); 948 unsigned Reg = MRI->createVirtualRegister(RC); 949 SmallVector<MachineInstr *, 2> NewMIs; 950 if (!TII->unfoldMemoryOperand(MF, mi, Reg, 951 /*UnfoldLoad=*/true,/*UnfoldStore=*/false, 952 NewMIs)) { 953 DEBUG(dbgs() << "2addr: ABANDONING UNFOLD\n"); 954 return false; 955 } 956 assert(NewMIs.size() == 2 && 957 "Unfolded a load into multiple instructions!"); 958 // The load was previously folded, so this is the only use. 959 NewMIs[1]->addRegisterKilled(Reg, TRI); 960 961 // Tentatively insert the instructions into the block so that they 962 // look "normal" to the transformation logic. 963 mbbi->insert(mi, NewMIs[0]); 964 mbbi->insert(mi, NewMIs[1]); 965 966 DEBUG(dbgs() << "2addr: NEW LOAD: " << *NewMIs[0] 967 << "2addr: NEW INST: " << *NewMIs[1]); 968 969 // Transform the instruction, now that it no longer has a load. 970 unsigned NewDstIdx = NewMIs[1]->findRegisterDefOperandIdx(regA); 971 unsigned NewSrcIdx = NewMIs[1]->findRegisterUseOperandIdx(regB); 972 MachineBasicBlock::iterator NewMI = NewMIs[1]; 973 bool TransformSuccess = 974 TryInstructionTransform(NewMI, mi, mbbi, 975 NewSrcIdx, NewDstIdx, Dist, Processed); 976 if (TransformSuccess || 977 NewMIs[1]->getOperand(NewSrcIdx).isKill()) { 978 // Success, or at least we made an improvement. Keep the unfolded 979 // instructions and discard the original. 980 if (LV) { 981 for (unsigned i = 0, e = mi->getNumOperands(); i != e; ++i) { 982 MachineOperand &MO = mi->getOperand(i); 983 if (MO.isReg() && 984 TargetRegisterInfo::isVirtualRegister(MO.getReg())) { 985 if (MO.isUse()) { 986 if (MO.isKill()) { 987 if (NewMIs[0]->killsRegister(MO.getReg())) 988 LV->replaceKillInstruction(MO.getReg(), mi, NewMIs[0]); 989 else { 990 assert(NewMIs[1]->killsRegister(MO.getReg()) && 991 "Kill missing after load unfold!"); 992 LV->replaceKillInstruction(MO.getReg(), mi, NewMIs[1]); 993 } 994 } 995 } else if (LV->removeVirtualRegisterDead(MO.getReg(), mi)) { 996 if (NewMIs[1]->registerDefIsDead(MO.getReg())) 997 LV->addVirtualRegisterDead(MO.getReg(), NewMIs[1]); 998 else { 999 assert(NewMIs[0]->registerDefIsDead(MO.getReg()) && 1000 "Dead flag missing after load unfold!"); 1001 LV->addVirtualRegisterDead(MO.getReg(), NewMIs[0]); 1002 } 1003 } 1004 } 1005 } 1006 LV->addVirtualRegisterKilled(Reg, NewMIs[1]); 1007 } 1008 mi->eraseFromParent(); 1009 mi = NewMIs[1]; 1010 if (TransformSuccess) 1011 return true; 1012 } else { 1013 // Transforming didn't eliminate the tie and didn't lead to an 1014 // improvement. Clean up the unfolded instructions and keep the 1015 // original. 1016 DEBUG(dbgs() << "2addr: ABANDONING UNFOLD\n"); 1017 NewMIs[0]->eraseFromParent(); 1018 NewMIs[1]->eraseFromParent(); 1019 } 1020 } 1021 } 1022 } 1023 1024 return false; 1025 } 1026 1027 /// runOnMachineFunction - Reduce two-address instructions to two operands. 1028 /// 1029 bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) { 1030 DEBUG(dbgs() << "Machine Function\n"); 1031 const TargetMachine &TM = MF.getTarget(); 1032 MRI = &MF.getRegInfo(); 1033 TII = TM.getInstrInfo(); 1034 TRI = TM.getRegisterInfo(); 1035 LV = getAnalysisIfAvailable<LiveVariables>(); 1036 AA = &getAnalysis<AliasAnalysis>(); 1037 1038 bool MadeChange = false; 1039 1040 DEBUG(dbgs() << "********** REWRITING TWO-ADDR INSTRS **********\n"); 1041 DEBUG(dbgs() << "********** Function: " 1042 << MF.getFunction()->getName() << '\n'); 1043 1044 // ReMatRegs - Keep track of the registers whose def's are remat'ed. 1045 BitVector ReMatRegs(MRI->getNumVirtRegs()); 1046 1047 typedef DenseMap<unsigned, SmallVector<std::pair<unsigned, unsigned>, 4> > 1048 TiedOperandMap; 1049 TiedOperandMap TiedOperands(4); 1050 1051 SmallPtrSet<MachineInstr*, 8> Processed; 1052 for (MachineFunction::iterator mbbi = MF.begin(), mbbe = MF.end(); 1053 mbbi != mbbe; ++mbbi) { 1054 unsigned Dist = 0; 1055 DistanceMap.clear(); 1056 SrcRegMap.clear(); 1057 DstRegMap.clear(); 1058 Processed.clear(); 1059 for (MachineBasicBlock::iterator mi = mbbi->begin(), me = mbbi->end(); 1060 mi != me; ) { 1061 MachineBasicBlock::iterator nmi = llvm::next(mi); 1062 if (mi->isDebugValue()) { 1063 mi = nmi; 1064 continue; 1065 } 1066 1067 // Remember REG_SEQUENCE instructions, we'll deal with them later. 1068 if (mi->isRegSequence()) 1069 RegSequences.push_back(&*mi); 1070 1071 const MCInstrDesc &MCID = mi->getDesc(); 1072 bool FirstTied = true; 1073 1074 DistanceMap.insert(std::make_pair(mi, ++Dist)); 1075 1076 ProcessCopy(&*mi, &*mbbi, Processed); 1077 1078 // First scan through all the tied register uses in this instruction 1079 // and record a list of pairs of tied operands for each register. 1080 unsigned NumOps = mi->isInlineAsm() 1081 ? mi->getNumOperands() : MCID.getNumOperands(); 1082 for (unsigned SrcIdx = 0; SrcIdx < NumOps; ++SrcIdx) { 1083 unsigned DstIdx = 0; 1084 if (!mi->isRegTiedToDefOperand(SrcIdx, &DstIdx)) 1085 continue; 1086 1087 if (FirstTied) { 1088 FirstTied = false; 1089 ++NumTwoAddressInstrs; 1090 DEBUG(dbgs() << '\t' << *mi); 1091 } 1092 1093 assert(mi->getOperand(SrcIdx).isReg() && 1094 mi->getOperand(SrcIdx).getReg() && 1095 mi->getOperand(SrcIdx).isUse() && 1096 "two address instruction invalid"); 1097 1098 unsigned regB = mi->getOperand(SrcIdx).getReg(); 1099 TiedOperands[regB].push_back(std::make_pair(SrcIdx, DstIdx)); 1100 } 1101 1102 // Now iterate over the information collected above. 1103 for (TiedOperandMap::iterator OI = TiedOperands.begin(), 1104 OE = TiedOperands.end(); OI != OE; ++OI) { 1105 SmallVector<std::pair<unsigned, unsigned>, 4> &TiedPairs = OI->second; 1106 1107 // If the instruction has a single pair of tied operands, try some 1108 // transformations that may either eliminate the tied operands or 1109 // improve the opportunities for coalescing away the register copy. 1110 if (TiedOperands.size() == 1 && TiedPairs.size() == 1) { 1111 unsigned SrcIdx = TiedPairs[0].first; 1112 unsigned DstIdx = TiedPairs[0].second; 1113 1114 // If the registers are already equal, nothing needs to be done. 1115 if (mi->getOperand(SrcIdx).getReg() == 1116 mi->getOperand(DstIdx).getReg()) 1117 break; // Done with this instruction. 1118 1119 if (TryInstructionTransform(mi, nmi, mbbi, SrcIdx, DstIdx, Dist, 1120 Processed)) 1121 break; // The tied operands have been eliminated. 1122 } 1123 1124 bool IsEarlyClobber = false; 1125 bool RemovedKillFlag = false; 1126 bool AllUsesCopied = true; 1127 unsigned LastCopiedReg = 0; 1128 unsigned regB = OI->first; 1129 for (unsigned tpi = 0, tpe = TiedPairs.size(); tpi != tpe; ++tpi) { 1130 unsigned SrcIdx = TiedPairs[tpi].first; 1131 unsigned DstIdx = TiedPairs[tpi].second; 1132 1133 const MachineOperand &DstMO = mi->getOperand(DstIdx); 1134 unsigned regA = DstMO.getReg(); 1135 IsEarlyClobber |= DstMO.isEarlyClobber(); 1136 1137 // Grab regB from the instruction because it may have changed if the 1138 // instruction was commuted. 1139 regB = mi->getOperand(SrcIdx).getReg(); 1140 1141 if (regA == regB) { 1142 // The register is tied to multiple destinations (or else we would 1143 // not have continued this far), but this use of the register 1144 // already matches the tied destination. Leave it. 1145 AllUsesCopied = false; 1146 continue; 1147 } 1148 LastCopiedReg = regA; 1149 1150 assert(TargetRegisterInfo::isVirtualRegister(regB) && 1151 "cannot make instruction into two-address form"); 1152 1153 #ifndef NDEBUG 1154 // First, verify that we don't have a use of "a" in the instruction 1155 // (a = b + a for example) because our transformation will not 1156 // work. This should never occur because we are in SSA form. 1157 for (unsigned i = 0; i != mi->getNumOperands(); ++i) 1158 assert(i == DstIdx || 1159 !mi->getOperand(i).isReg() || 1160 mi->getOperand(i).getReg() != regA); 1161 #endif 1162 1163 // Emit a copy or rematerialize the definition. 1164 const TargetRegisterClass *rc = MRI->getRegClass(regB); 1165 MachineInstr *DefMI = MRI->getVRegDef(regB); 1166 // If it's safe and profitable, remat the definition instead of 1167 // copying it. 1168 if (DefMI && 1169 DefMI->getDesc().isAsCheapAsAMove() && 1170 DefMI->isSafeToReMat(TII, AA, regB) && 1171 isProfitableToReMat(regB, rc, mi, DefMI, mbbi, Dist)){ 1172 DEBUG(dbgs() << "2addr: REMATTING : " << *DefMI << "\n"); 1173 unsigned regASubIdx = mi->getOperand(DstIdx).getSubReg(); 1174 TII->reMaterialize(*mbbi, mi, regA, regASubIdx, DefMI, *TRI); 1175 ReMatRegs.set(TargetRegisterInfo::virtReg2Index(regB)); 1176 ++NumReMats; 1177 } else { 1178 BuildMI(*mbbi, mi, mi->getDebugLoc(), TII->get(TargetOpcode::COPY), 1179 regA).addReg(regB); 1180 } 1181 1182 MachineBasicBlock::iterator prevMI = prior(mi); 1183 // Update DistanceMap. 1184 DistanceMap.insert(std::make_pair(prevMI, Dist)); 1185 DistanceMap[mi] = ++Dist; 1186 1187 DEBUG(dbgs() << "\t\tprepend:\t" << *prevMI); 1188 1189 MachineOperand &MO = mi->getOperand(SrcIdx); 1190 assert(MO.isReg() && MO.getReg() == regB && MO.isUse() && 1191 "inconsistent operand info for 2-reg pass"); 1192 if (MO.isKill()) { 1193 MO.setIsKill(false); 1194 RemovedKillFlag = true; 1195 } 1196 MO.setReg(regA); 1197 } 1198 1199 if (AllUsesCopied) { 1200 if (!IsEarlyClobber) { 1201 // Replace other (un-tied) uses of regB with LastCopiedReg. 1202 for (unsigned i = 0, e = mi->getNumOperands(); i != e; ++i) { 1203 MachineOperand &MO = mi->getOperand(i); 1204 if (MO.isReg() && MO.getReg() == regB && MO.isUse()) { 1205 if (MO.isKill()) { 1206 MO.setIsKill(false); 1207 RemovedKillFlag = true; 1208 } 1209 MO.setReg(LastCopiedReg); 1210 } 1211 } 1212 } 1213 1214 // Update live variables for regB. 1215 if (RemovedKillFlag && LV && LV->getVarInfo(regB).removeKill(mi)) 1216 LV->addVirtualRegisterKilled(regB, prior(mi)); 1217 1218 } else if (RemovedKillFlag) { 1219 // Some tied uses of regB matched their destination registers, so 1220 // regB is still used in this instruction, but a kill flag was 1221 // removed from a different tied use of regB, so now we need to add 1222 // a kill flag to one of the remaining uses of regB. 1223 for (unsigned i = 0, e = mi->getNumOperands(); i != e; ++i) { 1224 MachineOperand &MO = mi->getOperand(i); 1225 if (MO.isReg() && MO.getReg() == regB && MO.isUse()) { 1226 MO.setIsKill(true); 1227 break; 1228 } 1229 } 1230 } 1231 1232 // Schedule the source copy / remat inserted to form two-address 1233 // instruction. FIXME: Does it matter the distance map may not be 1234 // accurate after it's scheduled? 1235 TII->scheduleTwoAddrSource(prior(mi), mi, *TRI); 1236 1237 MadeChange = true; 1238 1239 DEBUG(dbgs() << "\t\trewrite to:\t" << *mi); 1240 } 1241 1242 // Rewrite INSERT_SUBREG as COPY now that we no longer need SSA form. 1243 if (mi->isInsertSubreg()) { 1244 // From %reg = INSERT_SUBREG %reg, %subreg, subidx 1245 // To %reg:subidx = COPY %subreg 1246 unsigned SubIdx = mi->getOperand(3).getImm(); 1247 mi->RemoveOperand(3); 1248 assert(mi->getOperand(0).getSubReg() == 0 && "Unexpected subreg idx"); 1249 mi->getOperand(0).setSubReg(SubIdx); 1250 mi->RemoveOperand(1); 1251 mi->setDesc(TII->get(TargetOpcode::COPY)); 1252 DEBUG(dbgs() << "\t\tconvert to:\t" << *mi); 1253 } 1254 1255 // Clear TiedOperands here instead of at the top of the loop 1256 // since most instructions do not have tied operands. 1257 TiedOperands.clear(); 1258 mi = nmi; 1259 } 1260 } 1261 1262 // Some remat'ed instructions are dead. 1263 for (int i = ReMatRegs.find_first(); i != -1; i = ReMatRegs.find_next(i)) { 1264 unsigned VReg = TargetRegisterInfo::index2VirtReg(i); 1265 if (MRI->use_nodbg_empty(VReg)) { 1266 MachineInstr *DefMI = MRI->getVRegDef(VReg); 1267 DefMI->eraseFromParent(); 1268 } 1269 } 1270 1271 // Eliminate REG_SEQUENCE instructions. Their whole purpose was to preseve 1272 // SSA form. It's now safe to de-SSA. 1273 MadeChange |= EliminateRegSequences(); 1274 1275 return MadeChange; 1276 } 1277 1278 static void UpdateRegSequenceSrcs(unsigned SrcReg, 1279 unsigned DstReg, unsigned SubIdx, 1280 MachineRegisterInfo *MRI, 1281 const TargetRegisterInfo &TRI) { 1282 for (MachineRegisterInfo::reg_iterator RI = MRI->reg_begin(SrcReg), 1283 RE = MRI->reg_end(); RI != RE; ) { 1284 MachineOperand &MO = RI.getOperand(); 1285 ++RI; 1286 MO.substVirtReg(DstReg, SubIdx, TRI); 1287 } 1288 } 1289 1290 /// CoalesceExtSubRegs - If a number of sources of the REG_SEQUENCE are 1291 /// EXTRACT_SUBREG from the same register and to the same virtual register 1292 /// with different sub-register indices, attempt to combine the 1293 /// EXTRACT_SUBREGs and pre-coalesce them. e.g. 1294 /// %reg1026<def> = VLDMQ %reg1025<kill>, 260, pred:14, pred:%reg0 1295 /// %reg1029:6<def> = EXTRACT_SUBREG %reg1026, 6 1296 /// %reg1029:5<def> = EXTRACT_SUBREG %reg1026<kill>, 5 1297 /// Since D subregs 5, 6 can combine to a Q register, we can coalesce 1298 /// reg1026 to reg1029. 1299 void 1300 TwoAddressInstructionPass::CoalesceExtSubRegs(SmallVector<unsigned,4> &Srcs, 1301 unsigned DstReg) { 1302 SmallSet<unsigned, 4> Seen; 1303 for (unsigned i = 0, e = Srcs.size(); i != e; ++i) { 1304 unsigned SrcReg = Srcs[i]; 1305 if (!Seen.insert(SrcReg)) 1306 continue; 1307 1308 // Check that the instructions are all in the same basic block. 1309 MachineInstr *SrcDefMI = MRI->getVRegDef(SrcReg); 1310 MachineInstr *DstDefMI = MRI->getVRegDef(DstReg); 1311 if (SrcDefMI->getParent() != DstDefMI->getParent()) 1312 continue; 1313 1314 // If there are no other uses than copies which feed into 1315 // the reg_sequence, then we might be able to coalesce them. 1316 bool CanCoalesce = true; 1317 SmallVector<unsigned, 4> SrcSubIndices, DstSubIndices; 1318 for (MachineRegisterInfo::use_nodbg_iterator 1319 UI = MRI->use_nodbg_begin(SrcReg), 1320 UE = MRI->use_nodbg_end(); UI != UE; ++UI) { 1321 MachineInstr *UseMI = &*UI; 1322 if (!UseMI->isCopy() || UseMI->getOperand(0).getReg() != DstReg) { 1323 CanCoalesce = false; 1324 break; 1325 } 1326 SrcSubIndices.push_back(UseMI->getOperand(1).getSubReg()); 1327 DstSubIndices.push_back(UseMI->getOperand(0).getSubReg()); 1328 } 1329 1330 if (!CanCoalesce || SrcSubIndices.size() < 2) 1331 continue; 1332 1333 // Check that the source subregisters can be combined. 1334 std::sort(SrcSubIndices.begin(), SrcSubIndices.end()); 1335 unsigned NewSrcSubIdx = 0; 1336 if (!TRI->canCombineSubRegIndices(MRI->getRegClass(SrcReg), SrcSubIndices, 1337 NewSrcSubIdx)) 1338 continue; 1339 1340 // Check that the destination subregisters can also be combined. 1341 std::sort(DstSubIndices.begin(), DstSubIndices.end()); 1342 unsigned NewDstSubIdx = 0; 1343 if (!TRI->canCombineSubRegIndices(MRI->getRegClass(DstReg), DstSubIndices, 1344 NewDstSubIdx)) 1345 continue; 1346 1347 // If neither source nor destination can be combined to the full register, 1348 // just give up. This could be improved if it ever matters. 1349 if (NewSrcSubIdx != 0 && NewDstSubIdx != 0) 1350 continue; 1351 1352 // Now that we know that all the uses are extract_subregs and that those 1353 // subregs can somehow be combined, scan all the extract_subregs again to 1354 // make sure the subregs are in the right order and can be composed. 1355 MachineInstr *SomeMI = 0; 1356 CanCoalesce = true; 1357 for (MachineRegisterInfo::use_nodbg_iterator 1358 UI = MRI->use_nodbg_begin(SrcReg), 1359 UE = MRI->use_nodbg_end(); UI != UE; ++UI) { 1360 MachineInstr *UseMI = &*UI; 1361 assert(UseMI->isCopy()); 1362 unsigned DstSubIdx = UseMI->getOperand(0).getSubReg(); 1363 unsigned SrcSubIdx = UseMI->getOperand(1).getSubReg(); 1364 assert(DstSubIdx != 0 && "missing subreg from RegSequence elimination"); 1365 if ((NewDstSubIdx == 0 && 1366 TRI->composeSubRegIndices(NewSrcSubIdx, DstSubIdx) != SrcSubIdx) || 1367 (NewSrcSubIdx == 0 && 1368 TRI->composeSubRegIndices(NewDstSubIdx, SrcSubIdx) != DstSubIdx)) { 1369 CanCoalesce = false; 1370 break; 1371 } 1372 // Keep track of one of the uses. 1373 SomeMI = UseMI; 1374 } 1375 if (!CanCoalesce) 1376 continue; 1377 1378 // Insert a copy to replace the original. 1379 MachineInstr *CopyMI = BuildMI(*SomeMI->getParent(), SomeMI, 1380 SomeMI->getDebugLoc(), 1381 TII->get(TargetOpcode::COPY)) 1382 .addReg(DstReg, RegState::Define, NewDstSubIdx) 1383 .addReg(SrcReg, 0, NewSrcSubIdx); 1384 1385 // Remove all the old extract instructions. 1386 for (MachineRegisterInfo::use_nodbg_iterator 1387 UI = MRI->use_nodbg_begin(SrcReg), 1388 UE = MRI->use_nodbg_end(); UI != UE; ) { 1389 MachineInstr *UseMI = &*UI; 1390 ++UI; 1391 if (UseMI == CopyMI) 1392 continue; 1393 assert(UseMI->isCopy()); 1394 // Move any kills to the new copy or extract instruction. 1395 if (UseMI->getOperand(1).isKill()) { 1396 CopyMI->getOperand(1).setIsKill(); 1397 if (LV) 1398 // Update live variables 1399 LV->replaceKillInstruction(SrcReg, UseMI, &*CopyMI); 1400 } 1401 UseMI->eraseFromParent(); 1402 } 1403 } 1404 } 1405 1406 static bool HasOtherRegSequenceUses(unsigned Reg, MachineInstr *RegSeq, 1407 MachineRegisterInfo *MRI) { 1408 for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(Reg), 1409 UE = MRI->use_end(); UI != UE; ++UI) { 1410 MachineInstr *UseMI = &*UI; 1411 if (UseMI != RegSeq && UseMI->isRegSequence()) 1412 return true; 1413 } 1414 return false; 1415 } 1416 1417 /// EliminateRegSequences - Eliminate REG_SEQUENCE instructions as part 1418 /// of the de-ssa process. This replaces sources of REG_SEQUENCE as 1419 /// sub-register references of the register defined by REG_SEQUENCE. e.g. 1420 /// 1421 /// %reg1029<def>, %reg1030<def> = VLD1q16 %reg1024<kill>, ... 1422 /// %reg1031<def> = REG_SEQUENCE %reg1029<kill>, 5, %reg1030<kill>, 6 1423 /// => 1424 /// %reg1031:5<def>, %reg1031:6<def> = VLD1q16 %reg1024<kill>, ... 1425 bool TwoAddressInstructionPass::EliminateRegSequences() { 1426 if (RegSequences.empty()) 1427 return false; 1428 1429 for (unsigned i = 0, e = RegSequences.size(); i != e; ++i) { 1430 MachineInstr *MI = RegSequences[i]; 1431 unsigned DstReg = MI->getOperand(0).getReg(); 1432 if (MI->getOperand(0).getSubReg() || 1433 TargetRegisterInfo::isPhysicalRegister(DstReg) || 1434 !(MI->getNumOperands() & 1)) { 1435 DEBUG(dbgs() << "Illegal REG_SEQUENCE instruction:" << *MI); 1436 llvm_unreachable(0); 1437 } 1438 1439 bool IsImpDef = true; 1440 SmallVector<unsigned, 4> RealSrcs; 1441 SmallSet<unsigned, 4> Seen; 1442 for (unsigned i = 1, e = MI->getNumOperands(); i < e; i += 2) { 1443 unsigned SrcReg = MI->getOperand(i).getReg(); 1444 unsigned SubIdx = MI->getOperand(i+1).getImm(); 1445 if (MI->getOperand(i).getSubReg() || 1446 TargetRegisterInfo::isPhysicalRegister(SrcReg)) { 1447 DEBUG(dbgs() << "Illegal REG_SEQUENCE instruction:" << *MI); 1448 llvm_unreachable(0); 1449 } 1450 1451 MachineInstr *DefMI = MRI->getVRegDef(SrcReg); 1452 if (DefMI->isImplicitDef()) { 1453 DefMI->eraseFromParent(); 1454 continue; 1455 } 1456 IsImpDef = false; 1457 1458 // Remember COPY sources. These might be candidate for coalescing. 1459 if (DefMI->isCopy() && DefMI->getOperand(1).getSubReg()) 1460 RealSrcs.push_back(DefMI->getOperand(1).getReg()); 1461 1462 bool isKill = MI->getOperand(i).isKill(); 1463 if (!Seen.insert(SrcReg) || MI->getParent() != DefMI->getParent() || 1464 !isKill || HasOtherRegSequenceUses(SrcReg, MI, MRI) || 1465 !TRI->getMatchingSuperRegClass(MRI->getRegClass(DstReg), 1466 MRI->getRegClass(SrcReg), SubIdx)) { 1467 // REG_SEQUENCE cannot have duplicated operands, add a copy. 1468 // Also add an copy if the source is live-in the block. We don't want 1469 // to end up with a partial-redef of a livein, e.g. 1470 // BB0: 1471 // reg1051:10<def> = 1472 // ... 1473 // BB1: 1474 // ... = reg1051:10 1475 // BB2: 1476 // reg1051:9<def> = 1477 // LiveIntervalAnalysis won't like it. 1478 // 1479 // If the REG_SEQUENCE doesn't kill its source, keeping live variables 1480 // correctly up to date becomes very difficult. Insert a copy. 1481 1482 // Defer any kill flag to the last operand using SrcReg. Otherwise, we 1483 // might insert a COPY that uses SrcReg after is was killed. 1484 if (isKill) 1485 for (unsigned j = i + 2; j < e; j += 2) 1486 if (MI->getOperand(j).getReg() == SrcReg) { 1487 MI->getOperand(j).setIsKill(); 1488 isKill = false; 1489 break; 1490 } 1491 1492 MachineBasicBlock::iterator InsertLoc = MI; 1493 MachineInstr *CopyMI = BuildMI(*MI->getParent(), InsertLoc, 1494 MI->getDebugLoc(), TII->get(TargetOpcode::COPY)) 1495 .addReg(DstReg, RegState::Define, SubIdx) 1496 .addReg(SrcReg, getKillRegState(isKill)); 1497 MI->getOperand(i).setReg(0); 1498 if (LV && isKill) 1499 LV->replaceKillInstruction(SrcReg, MI, CopyMI); 1500 DEBUG(dbgs() << "Inserted: " << *CopyMI); 1501 } 1502 } 1503 1504 for (unsigned i = 1, e = MI->getNumOperands(); i < e; i += 2) { 1505 unsigned SrcReg = MI->getOperand(i).getReg(); 1506 if (!SrcReg) continue; 1507 unsigned SubIdx = MI->getOperand(i+1).getImm(); 1508 UpdateRegSequenceSrcs(SrcReg, DstReg, SubIdx, MRI, *TRI); 1509 } 1510 1511 if (IsImpDef) { 1512 DEBUG(dbgs() << "Turned: " << *MI << " into an IMPLICIT_DEF"); 1513 MI->setDesc(TII->get(TargetOpcode::IMPLICIT_DEF)); 1514 for (int j = MI->getNumOperands() - 1, ee = 0; j > ee; --j) 1515 MI->RemoveOperand(j); 1516 } else { 1517 DEBUG(dbgs() << "Eliminated: " << *MI); 1518 MI->eraseFromParent(); 1519 } 1520 1521 // Try coalescing some EXTRACT_SUBREG instructions. This can create 1522 // INSERT_SUBREG instructions that must have <undef> flags added by 1523 // LiveIntervalAnalysis, so only run it when LiveVariables is available. 1524 if (LV) 1525 CoalesceExtSubRegs(RealSrcs, DstReg); 1526 } 1527 1528 RegSequences.clear(); 1529 return true; 1530 } 1531